Я использую jMagick для java для обработки загруженных файлов (изображений и файлов PDF). Большинство изображений работают нормально, но когда я попытался преобразовать большие многостраничные pdf-файлы в изображения разного размера, он потреблял очень большой объем системной памяти (около 20 ГБ физической памяти для 200-мегапиксельных pdf-файлов) и в конечном итоге потерпел неудачу. Я устанавливаю плотность на 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 нет ошибок или исключений, я просто вижу, что процесс умер. Я попытался использовать policy.xml в /usr/share/ImageMagick-6.5.4/config/, чтобы ограничить использование памяти следующим образом:
<?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. Очень ценю любые советы!