【问题标题】:Get image dimensions using batch script (ImageMagick)使用批处理脚本 (ImageMagick) 获取图像尺寸
【发布时间】:2015-09-28 21:46:25
【问题描述】:

我正在尝试使用 ImageMagick 在图像上创建边框。 这是一个简单的过程,我可以使用硬编码值手动完成,但我希望它更智能。 它需要做的是能够简单地定义你想要边框的图像,然后脚本运行,获取图像的尺寸,然后将我拥有的边框图像调整到这些尺寸,然后拍打顶部的边框。

为此,根据我的基本理解,我必须将图像的宽度和高度存储为变量。我得到的最接近的(实际上是得到信息)是

identify "image.png"

这会吐出我需要的信息,但我需要将宽度/高度存储到变量中,以便在以后的流程中使用它们。 我从https://superuser.com/questions/323970/how-can-i-get-the-image-dimensions-of-a-targa-file-through-a-batch-script找到以下代码

(注意:我的 .bat 文件名为“imagecheck.bat”

identify -format "imagecheck2.bat %w %h" image.png > temp.bat
temp.bat

根据该代码的发布者所说,它将从 image.png 获取宽度和高度(%w 和 %h),然后将其作为变量存储在 imagecheck2.bat 中,我可以作为 %1 访问(对于 % w) 和 %2(对于 %h)

所以,话虽如此,在 imagecheck2.bat 中,我有

@echo off
echo The parameters were: %1 and %2
pause

然后打印出来

The parameters were:  and 

这应该是这么简单的事情;任何想法我错过了什么? 提前致谢。

【问题讨论】:

  • 为什么会有两个imagecheck 批处理文件?难道你不能把> temp.bat拿走,一调用命令就得到输出吗?
  • 上面的代码只是从链接中提取的,然后我对其进行了一些修改,使其更像我所拥有的。在 ImageMagick 的命令完成后,我无法获得输出。

标签: batch-file imagemagick


【解决方案1】:

这是一种无需使用任何辅助文件即可完成此操作的方法。

for /f "tokens=1-2" %%i in ('identify -ping -format "%%w %%h" logo:') do set W=%%i & set H=%%j
echo width: %W%
echo height: %H%

将“logo:”替换为图片的文件名。

也就是说,我强烈建议不要使用 MS Batch,因为您的程序越复杂,代码就越荒谬。

顺便说一句,在该 identify 命令中使用 -ping 标志大大加快了操作速度,因为它告诉 identify 不要将整个图像加载到内存中,它足以计算尺寸。

【讨论】:

  • 你是个天才!非常感谢,另外,我使用批处理的唯一原因是因为最终所有这些都将由 PHP 操作,并且 1)批量编写这些更容易(至少对我而言)2)据我了解,执行一个 system() 调用来运行批处理文件比为我的某些操作所需的 ImageMagick 的每个命令运行每个 system() 调用要快得多。此外,由于 PHP 的字符串限制,我无法通过 PHP 的 system() 进行分层/屏蔽,但通过批处理文件中的命令可以正常工作。
  • 啊。在这种情况下,我建议先放弃 Batch,然后再放弃 PHP ;-) 谢谢投票。
  • 哈哈,如果不是出于工作目的,我很乐意放弃 PHP
  • -ping 的建议今天仍然有效吗?我是 ImageMagick 的新手,在 docs 中找不到它(至少在那里)
【解决方案2】:

您可以简单地从 PNG 中提取宽度和高度,而不是使用 ImageMagick。它们位于已知位置,每个都是按网络字节顺序排列的 4 字节整数(最高有效字节在前)。与文件开头的偏移量是

 signature:   bytes 0-7
 IHDR length: bytes 8-11
 "IHDR":      bytes 12-15
 width:       bytes 16-19
 height:      bytes 20-23

【讨论】:

  • 每种不同文件类型的顺序不一样吧? PNG 是主要文件类型,但位图、jpeg 和 targa 的可能性很大(不幸的是)。
  • 这个答案是针对 PNG 的,就像你的问题一样。对于各种类型的图像,“识别”将找到尺寸,如retroj的答案中所述。
  • 它确实按照我的要求做,那是我的错;不过仍然绝对有用。谢谢:)
猜你喜欢
  • 1970-01-01
  • 2012-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-29
  • 1970-01-01
相关资源
最近更新 更多