标签: imagemagick

如何使用 ImageMagick 将多张图像平均为一张?

convert -average darky1.jpg darky2.jpg lighty1.jpg lighty2.jpg l.ppm
convert -average lighty1.jpg lighty2.jpg lighty1.jpg lighty2.jpg d.ppm
Run Code Online (Sandbox Code Playgroud)

l.ppm 比 d.ppm 轻得多。图像的顺序很重要(但不应该)。

使用evaluate-sequence mean.

如何正确操作?

imagemagick

5
推荐指数
1
解决办法
4443
查看次数

并行处理比顺序处理慢?

编辑:对于将来偶然发现这一点的任何人:Imagemagick 使用 MP 库。如果有可用的核心,那么使用它们会更快,但如果您有并行作业,那就没有帮助了。

执行以下操作之一:

  • 串行完成您的工作(使用 Imagemagick 并行模式)
  • 设置 MAGICK_THREAD_LIMIT=1 来调用有问题的 imagemagick 二进制文件。

通过让 Imagemagick 仅使用一个线程,它在我的测试用例中减慢了 20-30%,但这意味着我可以在每个核心上运行一项作业而不会出现问题,从而显着提高性能的净值。

原问题:

在使用 ImageMagick 转换一些图像时,我注意到有些奇怪的效果。使用 xargs 比标准 for 循环慢得多。由于 xargs 仅限于单个进程,因此其行为应类似于 for 循环,因此我对此进行了测试,发现它大致相同。

于是,我们就有了这个演示。

  • 四核(AMD 速龙 X4,2.6GHz)
  • 完全在 tempfs 上工作(总共 16g ram;无交换)
  • 无其他主要负载

结果:

/media/ramdisk/img$ time for f in *.bmp; do echo $f ${f%bmp}png; done | xargs -n 2 -P 1 convert -auto-level

real        0m3.784s
user        0m2.240s
sys         0m0.230s
/media/ramdisk/img$ time for f in *.bmp; do echo $f ${f%bmp}png; done | xargs -n 2 …
Run Code Online (Sandbox Code Playgroud)

linux performance terminal imagemagick parallel-processing

5
推荐指数
1
解决办法
2093
查看次数

如何使用给定的字体文件渲染一些文本?

如何使用给定的字体渲染一些文本?期待类似的东西:

echo "The slow cyan snail creeps under the eager cat" | render_text --font ./qqq.ttf --scale=18 -o text.png
Run Code Online (Sandbox Code Playgroud)

我希望这在 ImageMagick/GraphicsMagick 套件中的某个地方。

示例用例:使用多种字体渲染相同的文本(并且不想将所有字体安装到系统中)。

fonts imagemagick

5
推荐指数
1
解决办法
4592
查看次数

PDF => 光栅,是否可以根据输入页面大小调整采样分辨率?

我正在使用convert(Imagemagick 组件,在后台委托给 Ghostscript)将 PDF 文件的第一页转换为图像。

通常,convert -density 200 file.pdf[0] first_page.png它将完成这项工作,它会以每英寸纸张 200 像素的速度对 PDF 文件进行采样。

但是,很少发生某些 PDF 异常巨大的情况(有时是 A0 纸,最近是页面超过 23 平方米(长 183 英寸,宽 185 英寸)的 PDF。

对于这样的文件,convert会挂掉,吃CPU时间。宽度和高度超过 35000 像素的图像根本无法使用。

因此问题是:Imagemagick 中是否有一个开关可以使密度适应页面大小,或者至少指定我们不想采样超过 PDF 文件最大区域的一部分(左上角,30x30 英寸)例如)?

谢谢。

编辑:在其官方 git 存储库中,MuPDF添加了-w-h开关,与-r将在这里执行所需的操作。

pdf ghostscript imagemagick

5
推荐指数
1
解决办法
1873
查看次数

使用脚本自动选择 JPEG 和 PNG

选择正确的格式来保存图像对于保持图像质量和减少伪影至关重要。不同的格式遵循不同的压缩方法,并具有各自的优点和缺点。

例如,JPG 适用于色彩渐变丰富的现实生活照片。另一方面,无损 PNG 在原理图方面要优越得多:

在此处输入图片说明

在处理大量文件时,选择正确的格式可能是一件苦差事。这就是为什么我很想找到一种方法来自动化它。


关于我的特定用例的一些背景知识:

我正在为我大学的一系列讲座制作一些讲义。讲义中有丰富的图表,我必须从 PDF 格式的幻灯片中提取。提取这些图像给了我无损的 PNG,有时会不必要地大。

将这些特定文件转换为 JPEG 可以将它们的大小减少到原始文件大小的 20% 以下,同时保持相同的质量。这很重要,因为在文字处理器中处理数百张大图像非常容易崩溃。

将所有提取的 PNG 批量转换为 JPEG不是我愿意遵循的选项,因为大多数图像更适合格式化为 PNG。转换这些将导致大小不显着的减少,有时甚至会增加文件大小 - 至少我的测试运行显示了这一点。


我们可以从中得出的是,压缩后的文件大小可以作为指示哪种格式最适合特定图像的指标。它不是一个特别准确的预测器,但效果很好。那么为什么不以脚本的形式使用它:

在此处输入图片说明

我包含inotifywait是因为我希望在将提取的图像拖到文件夹中时自动执行脚本。

这是我过去几周一直在使用的脚本的更简单版本:

#!/bin/bash
inotifywait -m --format "%w%f" --exclude '.jpg' -r -e create -e moved_to --fromfile '/home/MHC/.scripts/Workflow/Conversion/include_inotifywait' | while read file; do mogrify -format jpg -quality 92 "$file"
done
Run Code Online (Sandbox Code Playgroud)

脚本的高级版本必须

  • 能够处理文件名和目录名中的空格
  • 保留原始文件名
  • 如果设置了 alpha 值,则展平 PNG 图像
  • 比较临时转换后的图像与其原始图像之间的文件大小
  • 确定差异是否大于给定的百分比
  • 按指示行动

实际转换可以使用 imagemagick 工具完成:

convert -quality 92 -flatten -background white file.png file.jpg
Run Code Online (Sandbox Code Playgroud)

不幸的是,我的 …

png unix jpeg imagemagick conversion

5
推荐指数
1
解决办法
808
查看次数

如何完全删除“ImageMagick”?

我想我之前不小心在我的 CentOS 5.8 上安装了 2 个 ImageMagicks。

版本 6.2.8 已被删除

yum erase ImageMagick
Run Code Online (Sandbox Code Playgroud)

但是,当我输入时它仍然显示这一点 $convert -version

Version: ImageMagick 6.8.2-9 2013-02-11 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2013 ImageMagick Studio LLC
Features: DPC OpenMP
Delegates: jng jpeg png ps xml zlib
Run Code Online (Sandbox Code Playgroud)

which convert 显示这个

/usr/local/bin/convert
Run Code Online (Sandbox Code Playgroud)

这个。我可能是从源代码安装的。
我怎样才能删除它?

linux unix centos imagemagick

5
推荐指数
1
解决办法
3万
查看次数

在 ImageMagick 中使用 GIMP 颜色曲线

我用 GIMP 创建了一条颜色曲线。它看起来像这样:

~/.gimp2.8/curves/selphy
Run Code Online (Sandbox Code Playgroud)

(只是第一行)

# GIMP curves tool settings

(time 0)
(channel value)
(curve
    (curve-type smooth)
    (n-points 17)
    (points 34 0.000000 0.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 0.375000 0.490637 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 1.000000 1.000000)
    (n-samples 256)
    (samples 256 .....
Run Code Online (Sandbox Code Playgroud)

我想用转换(ImageMagick)批量处理一些图像。

有没有办法使用这条曲线convert

gimp imagemagick

5
推荐指数
1
解决办法
1537
查看次数

批量处理文档图像以使其看起来像传真

假设我有一张文本文档的照片或扫描件,可能带有一些低对比度水印背景。如果是照片,除了水印之外,还会有来自照明的亮度梯度,并且可能来自由于折叠而未平放的纸张。

我想用 imagemagick 对这些照片进行后期处理,使其看起来像传真,即将图像转换为单色黑/白以校正局部亮度变化。正常-threshold选项将不起作用,因为

  1. 它不会自动检测每张照片所需的亮度级别。
  2. 由于亮度梯度,图像一部分上的文本可能比另一部分上的背景更亮,这样对于任何给定的全局阈值,一些文本都会丢失。

智能手机上的 Cam-Scanner 应用程序通常提供黑/白文档选项,用于校正此类颜色渐变并计算阈值的合理第一次猜测,这足以进行批处理。

但是,当我已经在 PC 上拥有原始图像时,它们并没有帮助,尽管理论上我可以将它们上传到智能手机并导入它们——这非常不切实际,尤其是对于大量图像。

imagemagick 或其他一些具有批处理功能的软件(最好是开源的)是否支持这种转换?

scanner fax gradient imagemagick

5
推荐指数
1
解决办法
3774
查看次数

i3wm:如果绑定到键,屏幕截图脚本将失败

imagemagick 的importshell 命令拍摄桌面快照。执行中

import /tmp/foo.png
Run Code Online (Sandbox Code Playgroud)

会将我的光标转换为十字准线,并允许我选择要捕获的屏幕区域。但是,如果我尝试将该命令绑定到 i3wm 热键,它就不起作用。

我的 i3wm 配置文件中的以下键绑定

# ...
bindsym $mod+m exec "import /tmp/foo.png"
# ...
Run Code Online (Sandbox Code Playgroud)

产生以下错误(我可以将其输出到终端):

import-im6.q16:无法抓取鼠标`':没有这样的文件或目录@ error/xwindow.c/XSelectWindow/9187。

这是为什么?我怎样才能让它发挥作用?

imagemagick i3-window-manager

5
推荐指数
1
解决办法
614
查看次数

为什么在 ImageMagick 中转换不能将 pdf 转换为图像

我尝试从 Windows 10 命令行将 pdf 文件转换为 ImageMagick 中的 png 图像,如下所示:

Magick convert a.pdf a.png
Run Code Online (Sandbox Code Playgroud)

我得到错误

magick: FailedToExecuteCommand `"gswin32c.exe" -q ...
Run Code Online (Sandbox Code Playgroud)

但它适用于将图像转换为图像。问题是什么?

pdf imagemagick conversion windows-10

4
推荐指数
1
解决办法
2243
查看次数