【问题标题】:Convert image to pdf with Imagemagick keeping image resolution and placing it on top left corner使用 Imagemagick 将图像转换为 pdf 保持图像分辨率并将其放置在左上角
【发布时间】:2020-12-15 09:55:32
【问题描述】:
我正在使用 imagemagick 将图像转换为具有 A4 页面格式的 pdf,试图保持图像分辨率并将其放在 PDF 的中心(图像的扩展名和大小各不相同)。我试过这个:
convert image.jpg -resize 595x842^\> -gravity center -background white -units PixelsPerInch -page a4 image.pdf
此命令保持图像的质量和分辨率,但 pdf 中的图像根据图像大小出现在不同的位置(尺寸为 10109x4542 的图像出现在底部,另一个尺寸为 800x464 的图像出现在页面顶部附近)。有没有办法保持分辨率并将图像放在 PDF 的中心?
【问题讨论】:
标签:
image
pdf
imagemagick
【解决方案1】:
我找到了这个问题的解决方案。
这里是 bash 代码:
#!/bin/bash
if [ -z "$1" ] || [ -z "$2" ]
then
echo "Usage: $0 <input> <output>"
exit 1;
fi
max () {
echo $(( $1 > $2 ? $1 : $2 ))
}
IMAGE_X=$(identify -format "%w" "$1");
IMAGE_Y=$(identify -format "%h" "$1");
IMAGE_DENSITY_X=$(( $IMAGE_X * 100 / 827 ))
IMAGE_DENSITY_Y=$(( $IMAGE_Y * 100 / 1169 ))
IMAGE_DENSITY=$(max $IMAGE_DENSITY_X $IMAGE_DENSITY_Y)
echo "Image density: $IMAGE_DENSITY"
PAGE_SIZE_X=$(( $IMAGE_DENSITY * 827 / 100 ))
PAGE_SIZE_Y=$(( $IMAGE_DENSITY * 1169 / 100 ))
echo "Page size X: $PAGE_SIZE_X"
echo "Page size Y: $PAGE_SIZE_Y"
OFFSET_X=$(( ($PAGE_SIZE_X - $IMAGE_X) / 2 * 72 / $IMAGE_DENSITY ))
OFFSET_Y=$(( ($PAGE_SIZE_Y - $IMAGE_Y) / 2 * 72 / $IMAGE_DENSITY ))
echo "$IMAGE_DENSITY $PAGE_SIZE_X $OFFSET_X $OFFSET_Y"
convert "$1" \
-page ${PAGE_SIZE_X}x${PAGE_SIZE_Y}+${OFFSET_X}+${OFFSET_Y} \
-units PixelsPerInch \
-density $IMAGE_DENSITY \
-format pdf \
"$2"