【问题标题】:bash adjusting image dimensions to fit a certain sizebash 调整图像尺寸以适合特定尺寸
【发布时间】:2017-05-21 00:20:56
【问题描述】:

我到处搜索,但找不到答案。 我想准确地输出 50Kb 的文件夹的所有图像并保持原始纵横比。

我尝试ImageMagick 并将大小调整为 250x250,例如,但它对我不起作用,它所做的是更改第一个维度并调整另一个维度,因此输出图像的大小不同。

for image in `ls $@*.jpg`; do
  mogrify "${image}" -resize 250x250 "${image}"
done

怎么做?谢谢

【问题讨论】:

    标签: bash image image-processing imagemagick


    【解决方案1】:

    更新答案

    如果您希望图像的文件大小限制为 50kB,请使用:

    convert input.jpg -define jpeg:extent=50KB output.jpg
    

    原答案

    使用mogrify,但要小心它会覆盖你所有的图片:

    mogrify -resize 250x250! *.jpg
    

    一般来说,当使用mogrify 时,我喜欢使用-path 选项来指定结果的输出目录,这样可以避免原件被覆盖:

    mkdir results
    mogrify -path results ...
    

    如果您在调整大小后添加!,即使它会扭曲图片的形状也会强制调整大小,您的脚本将起作用。


    如果你想用 Python 做类似的事情,我写了一个很好的答案here。它对满足最大尺寸要求的 JPEG 质量进行二分搜索。

    【讨论】:

    • 谢谢。我试过了,输出图像的大小在 41Kb 到 55Kb 之间变化。一张已经是 41Kb 的图片变小了(19,3Kb)。我实际上意识到我的原始代码与该命令执行相同的操作。输出图像不完全是 50Kb。有没有办法解决这个问题?
    • 不,定义的范围只是一个提示,ImageMagick 会尽力匹配它,但过程很复杂,因为无法准确预测图像的压缩程度。
    • 我有一个文件夹,里面装满了正好 50,X.KB 的图片(没有收缩或拉伸,尺寸不是常数)来测试我的代码,我相信一定有一个简单的方法可以这样做
    • 我能问一下为什么你对 50kB 很着迷吗?我从来没有听说过这样的要求。我只能建议一个迭代过程,您可以稍微改变颜色数量或清晰度或像素尺寸,直到您足够接近目标。
    • 我没有固定在 50Kb 上,我只想尽可能重现他们所做的相同的事情,因为我更有效地修复它们的大小(拥有相同数量的信息)并关注它们之间的其他变化(关键点差异)。我希望我足够清楚
    猜你喜欢
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 2013-02-10
    • 2013-02-24
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    相关资源
    最近更新 更多