如何放大裁剪尺寸

Posted

技术标签:

【中文标题】如何放大裁剪尺寸【英文标题】:How to upscale crop dimensions 【发布时间】:2017-02-25 03:08:53 【问题描述】:

我正在使用 minimagick。我正在使用resize_to_fit: [300, nil] 向用户显示图像,然后使用 jcrop 允许他们裁剪图像。我正在保存 jcrop 坐标宽度、高度、x 和 y。

我想使用这些坐标来裁剪更大版本的图像。为了得到这个更大的版本,我在原版上使用了resize_to_fit: [600, nil]

我想使用尺寸和偏移量来裁剪图像,但显然我不能使用 jcrop 提供的坐标。

有没有办法放大坐标,以便当我使用它们裁剪 600 像素宽的图像时,它看起来与用户为 300 像素宽的图像输入的一样?

【问题讨论】:

【参考方案1】:

我的工作流程与您描述的差不多,除了 我使用的图像的比例正好是 25%。

我使用 ImageMagick 的“显示”或 GraphicsMagick 的“显示”裁剪缩放的图像并保存为 PNG(使用相同的文件名 只有扩展名从 JPG 更改为 png)。这记录了裁剪 PNG IHDR 和 PNG oFFs 块中的几何图形。然后我运行一个脚本 “recrop.sh”根据这些尺寸裁剪原始图像, 按比例放大 4 倍,并将结果保存为 PPM(这是无损的 并摆脱原始 JPEG 中烦人的元数据)。这是我的 “recrop.sh”(基于 GraphicsMagick)脚本:

root=`echo $1 | sed -e "s/.png//"`

gm identify $root.png
string=`gm identify $root.png`

echo string=$string

resize_x=\
`echo $string | sed -e "s/.* PNG //" -e "s/ Direct.*//" -e "s/x.*//"`

resize_y=\
`echo $string | sed -e "s/.* PNG [0-9]*x//" -e "s/+.*//"`

offset_x=\
`echo $string | sed -e "s/.* PNG [0-9x]*[0-9x]*+//" -e "s/+.*//"`

offset_y=\
`echo $string | sed -e "s/.* PNG [0-9x]*[0-9x]*+[0-9]*+//" -e "s/ .*//"`

resize_x=`dc "-e $resize_x 4 * p"`
resize_y=`dc "-e $resize_y 4 * p"`
offset_x=`dc "-e $offset_x 4 * p"`
offset_y=`dc "-e $offset_y 4 * p"`

echo resize_x = $resize_x
echo resize_y = $resize_y
echo offset_x = $offset_x
echo offset_y = $offset_y

crop=$resize_x\x$resize_y+$offset_x+$offset_y

echo crop geometry=$crop

gm convert $root.JPG -crop $crop $root.ppm

【讨论】:

以上是关于如何放大裁剪尺寸的主要内容,如果未能解决你的问题,请参考以下文章

ps如何裁剪图片尺寸大小?

使用 css 裁剪或缩放图像

如何使用 jcrop 裁剪不同尺寸的图像

在尺寸大于大多数桌面分辨率的“灯箱”中裁剪图像的可行解决方案

如何在 PHP 中裁剪具有尺寸(没有质量损失)的图像?

Android - 如何使用视图布局尺寸裁剪 jpeg