受控内存优化!Aspose.Imaging v19.10加载JPEG,CMX和PNG示例演示

翻译|行业资讯|编辑:李显亮|2019-10-14 12:00:46.337|阅读 28 次

概述:近期发布了Aspose.Imaging for .NET v19.10,其中对内存进行了优化,以更好的加载图像。接下来我们用示例为大家演示使用API加载CMX映像时的内存优化用法。

Aspose.Imaging for .NET一种高级图像处理控件,允许开发人员创建,编辑,绘制或转换图像。图像导出和转换是API核心功能之一,它允许在不安装Photoshop应用程序或任何其他图像编辑器的情况下保存为AdobePhotoshop®本机格式。

近期发布了Aspose.Imaging for .NET v19.10,其中对内存进行了优化,以更好的加载图像。接下来我们用示例为大家演示使用API加载CMX映像时的内存优化用法。

>>欢迎下载Aspose.Imaging for .NET v19.10体验

*10月狂欢季,限时购买Aspose系列产品,满额即享减免优惠,最高立减10000元,还有惊喜红包享不停!了解详情点击"咨询在线客服"哦~~


有时需要加载大图像,并且计算机上没有足够的可用RAM。 在这种情况下,加载图像时会抛出OutOfMemory异常。 我们在此新API中引入了对受控内存规范的支持。 现在,您可以通过指定缓冲区大小来控制内存加载图像的限制,这将确保内存使用量在这些范围之内。

因此,如果您设置内存优化并且机器RAM内存不足,则与图像相关的操作将开始使用硬盘驱动器。 这将确保以这种方式执行操作而不会出现内存不足异常,但是这将比使用RAM花费更多的时间。

新版本已为JPEG,CMX和PNG等图像提供了受控内存优化技术支持。

以下示例演示了使用API加载CMX映像时的内存优化用法。

// 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图像时内存优化的用法。

// 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的实现如下所示:

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技术交流QQ群(642018183)已开通,各类资源及时分享,欢迎交流讨论!

扫描关注“慧聚IT”微信公众号,及时获取更多产品最新动态及最新资讯

1562572142.jpg




标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果

登录 慧都网发表评论


暂无评论...

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
相关厂商
相关产品
Aspose.Imaging

Aspose.Imaging是一个可以让开发人员可以创建、编辑、画图、转换图像的图像处库,提供了一些开发平台原有功能基础之上的一些新特性。

在线
客服
在线
QQ
电话
咨询
400-700-1020
购物车 反馈 返回
顶部
在线客服系统
live chat