我正在使用jMagick处理上传的文件(图片和pdf文件)。大多数图像都可以正常处理,但是当我尝试将大型多页pdf文件转换为不同大小的图像时,系统内存消耗非常大(对于一个200M的pdf文件需要20G物理内存),最终失败了。由于图像质量太差,我甚至无法在输出图像中阅读单词,因此我将密度设置为200。以下是我的代码:
ImageInfo info = new ImageInfo(inputFilePath);
info.setDensity(200);
MagickImage image = new MagickImage(info);
MagickImage[] imageFrames = image.breakFrames();
for (MagickImage frame : imageFrames) {
ImageInfo frameInfo = new ImageInfo();
MagickImage frameDisplay = frame;
frameDisplay.setFileName(outputFile);
frameDisplay.writeImage(frameInfo);
}
在我的Java日志中没有错误或异常,我只是看到进程死亡了。我已经尝试使用位于 /usr/share/ImageMagick-6.5.4/config/ 的 policy.xml 来限制内存使用,方法如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policymap [
<!ELEMENT policymap (policy)+>
<!ELEMENT policy (#PCDATA)>
<!ATTLIST policy domain (delegate|coder|filter|path|resource) #IMPLIED>
<!ATTLIST policy name CDATA #IMPLIED>
<!ATTLIST policy rights CDATA #IMPLIED>
<!ATTLIST policy pattern CDATA #IMPLIED>
<!ATTLIST policy value CDATA #IMPLIED>
]>
<policymap>
<policy domain="resource" name="memory" value="256MB"/>
</policymap>
但是某种原因似乎无法工作。我正在使用ImageMagick-6.5.4版本。非常感谢任何建议!