草庐IT

php - Imagemagick Crop 命令没有给出完美的结果

coder 2024-01-01 原文

我正在使用 Imagemagick 来调整和裁剪图像。

测试图片:

我需要将它的大小调整为 300 x 320 帧,首先我正在调整图像的大小然后裁剪它,我正在使用以下命令:

exec("convert /uploadImagePath -thumbnail  300  /newImagePath");

exec("convert /newImagePath -gravity Center -crop 290x310+0+0 /newImagePath");

但它给了我下面的图像

如您所见,图像并不完整。我哪里错了?

最佳答案

(答案已更新,现在在下面进一步提供了 -liquid-rescale 的示例)


您的原始图片尺寸为:

489 x 640 pixels

您想要的尺寸似乎是:

290 x 310 pixels

如果没有以下任何一个,这将无法扩展到这些维度:

  1. 裁剪(不保留初始图像的所有区域)
  2. 保持所需的宽度(放弃所需的高度)
  3. 保持期望的高度(放弃期望的宽度)
  4. 失真(缩放时不保持纵横比)
  5. 填充(向一条或多条边添加更多像素)
  6. 移除不明显的像素(“液体重缩放”或“接缝雕刻”-- see Wikipedia)

您的结果显示“1”。 (裁剪),你不喜欢。所以你有选项“2”。 (保持宽度),“3”。 (保持高度),“4”。 (失真),“5”。 (填充)和“6”。 (接缝雕刻)留待测试。

'2.': 保持期望的高度

convert WPTgp.jpg -resize x310 keep-height.jpg

结果图像的尺寸为 237 x 310 像素
保持高度....
(自动确定宽度)

'3.': 保持所需的宽度

convert WPTgp.jpg -resize 290x keep-width.jpg

结果图像的尺寸为 290 x 380 像素
保持宽度.....
(自动确定高度)

'4.':失真

convert WPTgp.jpg -resize 290x310\! distorted.jpg

结果图像的尺寸为 290 x 310 像素
扭曲……
(忽略宽高比——如果需要以适应尺寸则扭曲图像)

'5.':填充

convert WPTgp.jpg \
   -resize 290x310 \
   -gravity center \
   -background orange \
   -extent 290x310 \
    padded.jpg

结果图像的尺寸为 290 x 310 像素。 (添加橙色背景只是为了证明图像的“扩展”确实有效。)
填充.........
(保持宽高比——扩展图像以获得所需的尺寸)

'6.':接缝雕刻

<罢工>

<罢工>
convert WPTgp.jpg -liquid-rescale 290x310\! liquid.jpg

<罢工> 以上是您通过快速阅读 ImageMagick 命令选项引用自发得出的命令。但是,它效果不佳,我改为使用:

convert WPTgp.jpg -liquid-rescale 599x640\! -scale 290x310 liquid.jpg
convert WPTgp.jpg -liquid-rescale 599x640\! -scale 48.4%   liquid.jpg

下面进一步解释了为什么我需要修改它....
液体缩放
抱歉——我现在无法提供示例图片;这需要安装额外的 ImageMagick 委托(delegate) liblqr(液体缩放库),我目前没有) 我现在有机会创建一个“液体缩放” ' 原始图像的版本。


关于 Seam Carving/'-liquid-rescale' 的注意事项:

如上所述,最后一张图片不是我最初建议的命令的结果,而是这两个修改版本之一的结果:

convert WPTgp.jpg -liquid-rescale 599x640\! -scale 290x310 liquid.jpg
convert WPTgp.jpg -liquid-rescale 599x640\! -scale 48.4%   liquid.jpg

请记住,我们有一张 489x610 像素的原始图像,我们希望将其缩放到 290x310 像素。但是 -liquid-rescale 不擅长同时在两个维度上重新缩放——它被设计为仅在一个方向上缩放(水平或垂直)。如果您尝试同时执行这两项操作,结果可能会出乎您的意料。这是最初提议的命令的结果:

 convert WPTgp.jpg -liquid-rescale 290x310\! liquid.jpg

LQR 出错

这就是为什么我想出了两个修改后的命令,它们分两步工作:

  1. 首先,仅对水平维度应用液体缩放,将原始宽度从 489 像素扩展到 599 像素。
  2. 其次,对中间结果应用“正常”宽高比保持缩放以生成最终图像。

关于php - Imagemagick Crop 命令没有给出完美的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11720817/

有关php - Imagemagick Crop 命令没有给出完美的结果的更多相关文章

  1. ruby - 难道Lua没有和Ruby的method_missing相媲美的东西吗? - 2

    我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/

  2. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  3. ruby-on-rails - rails 目前在重启后没有安装 - 2

    我有一个奇怪的问题:我在rvm上安装了ruby​​onrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(

  4. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

    我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

  5. 没有类的 Ruby 方法? - 2

    大家好!我想知道Ruby中未使用语法ClassName.method_name调用的方法是如何工作的。我头脑中的一些是puts、print、gets、chomp。可以在不使用点运算符的情况下调用这些方法。为什么是这样?他们来自哪里?我怎样才能看到这些方法的完整列表? 最佳答案 Kernel中的所有方法都可用于Object类的所有对象或从Object派生的任何类。您可以使用Kernel.instance_methods列出它们。 关于没有类的Ruby方法?,我们在StackOverflow

  6. ruby-on-rails - Rails 3,嵌套资源,没有路由匹配 [PUT] - 2

    我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle

  7. ruby-on-rails - 有没有办法为 CarrierWave/Fog 设置上传进度指示器? - 2

    我在Rails应用程序中使用CarrierWave/Fog将视频上传到AmazonS3。有没有办法判断上传的进度,让我可以显示上传进度如何? 最佳答案 CarrierWave和Fog本身没有这种功能;你需要一个前端uploader来显示进度。当我不得不解决这个问题时,我使用了jQueryfileupload因为我的堆栈中已经有jQuery。甚至还有apostonCarrierWaveintegration因此您只需按照那里的说明操作即可获得适用于您的应用的进度条。 关于ruby-on-r

  8. ruby - 没有类方法获取 Ruby 类名 - 2

    如何在Ruby中获取BasicObject实例的类名?例如,假设我有这个:classMyObjectSystem我怎样才能使这段代码成功?编辑:我发现Object的实例方法class被定义为returnrb_class_real(CLASS_OF(obj));。有什么方法可以从Ruby中使用它? 最佳答案 我花了一些时间研究irb并想出了这个:classBasicObjectdefclassklass=class这将为任何从BasicObject继承的对象提供一个#class您可以调用的方法。编辑评论中要求的进一步解释:假设你有对象

  9. 报告回顾丨模型进化狂飙,DetectGPT能否识别最新模型生成结果? - 2

    导读语言模型给我们的生产生活带来了极大便利,但同时不少人也利用他们从事作弊工作。如何规避这些难辨真伪的文字所产生的负面影响也成为一大难题。在3月9日智源Live第33期活动「DetectGPT:判断文本是否为机器生成的工具」中,主讲人Eric为我们讲解了DetectGPT工作背后的思路——一种基于概率曲率检测的用于检测模型生成文本的工具,它可以帮助我们更好地分辨文章的来源和可信度,对保护信息真实、防止欺诈等方面具有重要意义。本次报告主要围绕其功能,实现和效果等展开。(文末点击“阅读原文”,查看活动回放。)Ericmitchell斯坦福大学计算机系四年级博士生,由ChelseaFinn和Chri

  10. ruby-on-rails - rbenv:从 RVM 移动到 rbenv 后,在 Jenkins 执行 shell 中找不到命令 - 2

    我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions

随机推荐