我正在使用 Aspose.Imaging 19.11.0.0 使用压缩JPEG处理Tiff图像,
但是在这里,如果我有10MB +大小的tiff文件(具有50页),则在这种情况下,旋转所有这些tiff页需要30到40分钟,应用程序将进入无响应模式。
在我的代码中,假设我在Tiff图像文件中有50页,然后从客户端应用程序通过 foreach 循环迭代每页,并在服务器端为每页发送相应的Rotate方法进行旋转,
我知道浪费时间的因素之一是发送每个页面而不是一次发送所有页面,
但是当我调试代码时,发现tiffImage.Save(Stream,tiffOptions)
还在每一页上花费更多时间。
下面是使用JPEG压缩旋转页面的服务器端代码,
每次为所有页面调用RotatePageUsingAspose()
下面的方法时,
表示假设我只从50个页面中选择了第3页,那么对于参数为pageNumber =3
和rotation degree = 90 degree
的所选页面仅被调用一次
在这种情况下,意味着旋转第三页并保存该页面也将花费将近1分钟,这太慢了。
用于轮换的服务器端代码:
private void RotatePageUsingAspose(int pageNo,RotationDegrees rotationDegree)
{
float angleOfRotation = (float)rotationDegree;
// Auto mode is flexible and efficient.
Cache.CacheType = CacheType.Auto;
// The default cache max value is 0,which means that there is no upper limit.
Cache.MaxDiskSpaceForCache = 1073741824; // 1 gigabyte
Cache.MaxMemoryForCache = 1073741824; // 1 gigabyte
// Changing the following property will greatly affect performance.
Cache.ExactReallocateonly = false;
TiffOptions tiffOptions = new TiffOptions(TiffExpectedFormat.TiffJpegRgb);
//Set RGB color mode.
tiffOptions.Photometric = TiffPhotometrics.Rgb;
tiffOptions.BitsPerSample = new ushort[] { 8,8,8 };
try
{
using (TiffImage tiffImage = (TiffImage)Image.Load(Stream))
{
TiffFrame selectedFrame = tiffImage.Frames[pageNo - 1];
selectedFrame.Rotate(angleOfRotation);
tiffImage.Save(Stream,tiffOptions);
}
}
finally
{
tiffOptions.Dispose();
}
}
我向 Aspose.Imaging小组提出了同样的问题,但他们尚未提供解决方案。
请针对上述代码提出改进建议,以高效地保存页面。 如果可能,请提供实现此目标的方法。