翻譯|行業(yè)資訊|編輯:李顯亮|2019-10-14 12:00:46.337|閱讀 500 次
概述:近期發(fā)布了Aspose.Imaging for .NET v19.10,其中對(duì)內(nèi)存進(jìn)行了優(yōu)化,以更好的加載圖像。接下來我們用示例為大家演示使用API加載CMX映像時(shí)的內(nèi)存優(yōu)化用法。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Aspose.Imaging for .NET一種高級(jí)圖像處理控件,允許開發(fā)人員創(chuàng)建,編輯,繪制或轉(zhuǎn)換圖像。圖像導(dǎo)出和轉(zhuǎn)換是API核心功能之一,它允許在不安裝Photoshop應(yīng)用程序或任何其他圖像編輯器的情況下保存為AdobePhotoshop?本機(jī)格式。
近期發(fā)布了Aspose.Imaging for .NET v19.10,其中對(duì)內(nèi)存進(jìn)行了優(yōu)化,以更好的加載圖像。接下來我們用示例為大家演示使用API加載CMX映像時(shí)的內(nèi)存優(yōu)化用法。
>>歡迎下載Aspose.Imaging for .NET v19.10體驗(yàn)
*10月狂歡季,限時(shí)購(gòu)買Aspose系列產(chǎn)品,滿額即享減免優(yōu)惠,最高立減10000元,還有驚喜紅包享不停!了解詳情點(diǎn)擊哦~~
有時(shí)需要加載大圖像,并且計(jì)算機(jī)上沒有足夠的可用RAM。 在這種情況下,加載圖像時(shí)會(huì)拋出OutOfMemory異常。 我們?cè)诖诵翧PI中引入了對(duì)受控內(nèi)存規(guī)范的支持。 現(xiàn)在,您可以通過指定緩沖區(qū)大小來控制內(nèi)存加載圖像的限制,這將確保內(nèi)存使用量在這些范圍之內(nèi)。
因此,如果您設(shè)置內(nèi)存優(yōu)化并且機(jī)器RAM內(nèi)存不足,則與圖像相關(guān)的操作將開始使用硬盤驅(qū)動(dòng)器。 這將確保以這種方式執(zhí)行操作而不會(huì)出現(xiàn)內(nèi)存不足異常,但是這將比使用RAM花費(fèi)更多的時(shí)間。
新版本已為JPEG,CMX和PNG等圖像提供了受控內(nèi)存優(yōu)化技術(shù)支持。
以下示例演示了使用API加載CMX映像時(shí)的內(nèi)存優(yōu)化用法。
// Setting a memory limit of 10 megabytes for target loaded image using (Image image = Image.Load("example.cmx", new LoadOptions() { BufferSizeHint = 10 })) { image.Save( "output.png", new PngOptions() { VectorRasterizationOptions = new CmxRasterizationOptions { TextRenderingHint = TextRenderingHint.SingleBitPerPixel, SmoothingMode = SmoothingMode.AntiAlias, Positioning = PositioningTypes.DefinedByDocument} }); }
同樣,以下示例演示了使用API加載JPEG圖像時(shí)內(nèi)存優(yōu)化的用法。
// Setting a memory limit of 50 megabytes for target loaded image using (Image image = Image.Load("inputFile.jpg", new LoadOptions() { BufferSizeHint = 50 })) { image.Save("outputFile_Baseline.jpg", new JpegOptions { CompressionType = JpegCompressionMode.Baseline, Quality = 100 }); image.Save("outputFile_Progressive.jpg", new JpegOptions { CompressionType = JpegCompressionMode.Progressive }); image.Save("outputFile_Lossless.jpg", new JpegOptions { ColorType = JpegCompressionColorMode.YCbCr, CompressionType = JpegCompressionMode.Lossless, BitsPerChannel = 4 }); image.Save("outputFile_JpegLs.jpg", new JpegOptions { ColorType = JpegCompressionColorMode.YCbCr, CompressionType = JpegCompressionMode.JpegLs, JpegLsInterleaveMode = JpegLsInterleaveMode.None, JpegLsAllowedLossyError = 3, JpegLsPreset = null }); } // Setting a memory limit of 50 megabytes for target created image ImageOptionsBase createOptions = new JpegOptions { CompressionType = JpegCompressionMode.Progressive }; createOptions.BufferSizeHint = 50; createOptions.Source = new FileCreateSource("createdFile.jpg", false); using (var image = Image.Create(createOptions, 1000, 1000)) { image.Save(); // save to same location }
類似的基于Java的實(shí)現(xiàn)如下所示:
LoadOptions options = new LoadOptions(); options.setBufferSizeHint(50); // Setting a memory limit of 50 megabytes for target loaded image try (Image image = Image.load("inputFile.jpg", options)) { JpegOptions jpegOptions = new JpegOptions(); jpegOptions.setCompressionType(JpegCompressionMode.Baseline); jpegOptions.setQuality(100); image.save("outputFile_Baseline.jpg", jpegOptions); jpegOptions = new JpegOptions(); jpegOptions.setCompressionType(JpegCompressionMode.Progressive); image.save("outputFile_Progressive.jpg", jpegOptions); jpegOptions = new JpegOptions(); jpegOptions.setCompressionType(JpegCompressionMode.Lossless); jpegOptions.setColorType(JpegCompressionColorMode.YCbCr); jpegOptions.setBitsPerChannel((byte)4); image.save("outputFile_Lossless.jpg", jpegOptions); jpegOptions = new JpegOptions(); jpegOptions.setCompressionType(JpegCompressionMode.JpegLs); jpegOptions.setColorType(JpegCompressionColorMode.YCbCr); jpegOptions.setJpegLsInterleaveMode(JpegLsInterleaveMode.None); jpegOptions.setJpegLsAllowedLossyError(3); jpegOptions.setJpegLsPreset(null); image.save("outputFile_JpegLs.jpg", jpegOptions); } // Setting a memory limit of 50 megabytes for target created image try (JpegOptions createOptions = new JpegOptions()) { createOptions.setCompressionType(JpegCompressionMode.Progressive); createOptions.setBufferSizeHint(50); createOptions.setSource(new FileCreateSource("createdFile.jpg", false)); try (Image image = Image.create(createOptions, 1000, 1000)) { image.save(); // save to same location } }
ASPOSE技術(shù)交流QQ群(642018183)已開通,各類資源及時(shí)分享,歡迎交流討論!
掃描關(guān)注“慧聚IT”微信公眾號(hào),及時(shí)獲取更多產(chǎn)品最新動(dòng)態(tài)及最新資訊
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn