如何使用 ImageMagick 从 PDF 裁剪为 PNG 图块
How to use crop from PDF to PNG tiles using ImageMagick
美好的一天,
我在将 PDF 裁剪为 PNG 时遇到了很大的问题
PDF 大约为 1.6MB (2500x2500),一个过程大约需要 7-10 分钟并生成 700MB 的临时文件。
例如
exec("convert -density 400 'file.pdf' -resize 150% -crop 48x24@ png32:'file_%d.png'");
一个 PDF 必须生成大小从 25% 到 200% 的 PNG
我在这里生成密度、用于调整大小的大小以及网格行列数等属性
$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])];
}
在我一个接一个地启动转换器之后,它的时间非常昂贵。
$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 吃掉所有 space 我有 (40GB) => ~35GB 的临时文件
我的问题在哪里,我做错了什么?
我尝试将下面的参数传递给函数 $additional var:
"-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 Studio LLC
特点:OpenMP
Ubuntu 14.04.4 LTS
2GB / 2CPU
已编辑
一段时间后设法替换 GhostScript 上的 ImageMagick
gs -dNOPAUSE -dBATCH -sDEVICE=pngalpha -r240 -sOutputFile=\"file.png\" file.pdf
但不明白如何缩放和裁剪图像。
使用 ImageMagick 进行裁剪会生成约 35GB 的临时文件,并且比以前花费更多时间。
我设法通过这种方式解决了我的问题:
$info = exec("identify -ping %w {$original_pdf_file}"); preg_match('/(\d+x\d+)/', $info, $matches);
"gs -dNOPAUSE -dBATCH -sDEVICE=pngalpha -r{$r} -g{$dim} -dPDFFitPage -sOutputFile=\"{$png}\" {$filename}"
"convert ".escapeshellarg($png)." -gravity center -background none -extent {$ex}x{$ex} ".escapeshellarg($png)
"convert ".escapeshellarg($png)." -crop {$tiles}x{$tiles}! +repage ".escapeshellarg(str_replace(".png", "_%d.png", $png))
其中:
- $文件名=file.pdf
- $png = file.png
- $r = 120
- $ex = 4000
- $dim = $matches[1]
步骤:
- 在我以后可以使用 png 的大小后给了我原始文件的尺寸
- 将 pdf 转换为具有我需要的尺寸和纵横比的 png
- 将 png 转换为我希望的尺寸,纵横比 1:1
- 裁剪一切
在图像分辨率为 4000x4000 且文件大小为 1.4MB 和 0-30MB 的临时文件的机器上,此过程需要 27.59 秒。
美好的一天,
我在将 PDF 裁剪为 PNG 时遇到了很大的问题PDF 大约为 1.6MB (2500x2500),一个过程大约需要 7-10 分钟并生成 700MB 的临时文件。
例如
exec("convert -density 400 'file.pdf' -resize 150% -crop 48x24@ png32:'file_%d.png'");
一个 PDF 必须生成大小从 25% 到 200% 的 PNG
我在这里生成密度、用于调整大小的大小以及网格行列数等属性
$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])];
}
在我一个接一个地启动转换器之后,它的时间非常昂贵。
$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 吃掉所有 space 我有 (40GB) => ~35GB 的临时文件
我的问题在哪里,我做错了什么?
我尝试将下面的参数传递给函数 $additional var:
"-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 Studio LLC
特点:OpenMP
Ubuntu 14.04.4 LTS
2GB / 2CPU
已编辑
一段时间后设法替换 GhostScript 上的 ImageMagick
gs -dNOPAUSE -dBATCH -sDEVICE=pngalpha -r240 -sOutputFile=\"file.png\" file.pdf
但不明白如何缩放和裁剪图像。
使用 ImageMagick 进行裁剪会生成约 35GB 的临时文件,并且比以前花费更多时间。
我设法通过这种方式解决了我的问题:
$info = exec("identify -ping %w {$original_pdf_file}"); preg_match('/(\d+x\d+)/', $info, $matches);
"gs -dNOPAUSE -dBATCH -sDEVICE=pngalpha -r{$r} -g{$dim} -dPDFFitPage -sOutputFile=\"{$png}\" {$filename}"
"convert ".escapeshellarg($png)." -gravity center -background none -extent {$ex}x{$ex} ".escapeshellarg($png)
"convert ".escapeshellarg($png)." -crop {$tiles}x{$tiles}! +repage ".escapeshellarg(str_replace(".png", "_%d.png", $png))
其中:
- $文件名=file.pdf
- $png = file.png
- $r = 120
- $ex = 4000
- $dim = $matches[1]
步骤:
- 在我以后可以使用 png 的大小后给了我原始文件的尺寸
- 将 pdf 转换为具有我需要的尺寸和纵横比的 png
- 将 png 转换为我希望的尺寸,纵横比 1:1
- 裁剪一切
在图像分辨率为 4000x4000 且文件大小为 1.4MB 和 0-30MB 的临时文件的机器上,此过程需要 27.59 秒。