首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ImageMagick从PDF到PNG块使用裁剪

如何使用ImageMagick从PDF到PNG块使用裁剪
EN

Stack Overflow用户
提问于 2016-07-28 14:14:19
回答 1查看 531关注 0票数 1

日安,

我有很大的问题裁剪PDF到PNG。

PDF大约是1,6MB (2500x2500),一个进程大约需要7-10分钟,并生成700 of的临时文件。

例如:

代码语言:javascript
复制
exec("convert -density 400 'file.pdf' -resize 150% -crop 48x24@ png32:'file_%d.png'");

一个PDF必须生成从25%到200%的PNGs。

在这里,我生成了一些属性,比如密度、在%中调整大小以及网格行和列计数。

代码语言:javascript
复制
$x = 0; $y = 0;
for ($i = 25; $i <= 200; $i += 25) {
    $x += 8; $y += 4;

    $convert[$i] = ['density' => (($i < 75) ? 200 : ($i < 150) ? 300 : ($i < 200) ? 400 : 500), 'tiles' => implode("x", [$x, $y])];
}

在我一个接一个地启动转换器之后,它在时间上非常昂贵。

代码语言:javascript
复制
$file_cropper = function($filename, $additional = '') use ($density, $size, $tiles) {
    $pid = exec("convert -density $density ".escapeshellarg($filename)." -resize $size% -crop $tiles@ ".$additional." png32:".escapeshellarg(str_replace(".pdf", "_%d.png", $filename))." >/dev/null & echo $!");
    do {
        /* some really fast code */
    } while (file_exists("/proc/{$pid}"));
};

如果我同时启动它(8个进程),那么ImageMagick占用了我拥有的(40 it ) => ~35 it临时文件的所有空间。

我的问题在哪里,我做错了什么?

我试图将下面的params传递给函数$additional var:

代码语言:javascript
复制
"-page 0x0+0+0"
"+repage"
"-page 0x0+0+0 +repage"
"+repage -page 0x0+0+0"

什么都没变

版本: ImageMagick 6.7.7-10 2016-06-01 Q16 http://www.imagemagick.org

版权:版权(C) 1999-2012年ImageMagick工作室有限责任公司

特点: OpenMP

Ubuntu 14.04.4 LTS

2GB / 2CPU

编辑的

过了一段时间后,我设法在GhostScript上替换了GhostScript

gs -dNOPAUSE -dBATCH -sDEVICE=pngalpha -r240 -sOutputFile=\"file.png\" file.pdf,但不知道如何缩放图像和裁剪它。

使用ImageMagick进行裁剪会生成~35 and的临时文件,并且比以前花费更多的时间。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-29 09:00:22

我设法用这种方式解决了我的问题:

  1. $info = exec("identify -ping %w {$original_pdf_file}"); preg_match('/(\d+x\d+)/', $info, $matches);
  2. "gs -dNOPAUSE -dBATCH -sDEVICE=pngalpha -r{$r} -g{$dim} -dPDFFitPage -sOutputFile=\"{$png}\" {$filename}"
  3. "convert ".escapeshellarg($png)." -gravity center -background none -extent {$ex}x{$ex} ".escapeshellarg($png)
  4. "convert ".escapeshellarg($png)." -crop {$tiles}x{$tiles}! +repage ".escapeshellarg(str_replace(".png", "_%d.png", $png))

其中:

  • $filename = file.pdf
  • $png = file.png
  • $r = 120
  • $ex = 4000
  • $dim = $matches1

步骤:

  1. 在以后我可以使用png的大小后,给出原始文件的维数。
  2. 将pdf转换为png,尺寸为我所需的高宽比
  3. 将png转换为我希望的尺寸(宽径比为1:1 )
  4. 每种作物

此进程在我的计算机上需要27.59s,图像分辨率为4000x4000,文件大小为1,4MB和0-30 my的临时文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38639027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档