【问题标题】:ImageMagick script fails with MISLEADING filename or extension too long (-sparse-color)ImageMagick 脚本因错误的文件名或扩展名太长而失败(-sparse-color)
【发布时间】:2021-04-15 20:51:35
【问题描述】:

问题

在我相当短的脚本中,我遇到的问题是它有时会报告文件名或扩展名太长。根据我脚本中的 $image$size 值,可能会发生此错误。

例如下面的脚本使用来自here 的图像产生此错误 - 保存并转换为“example3.png”。

我确实在 Windows 上使用版本:ImageMagick 7.0.10-62 Q16 x64,但我不知道如何处理错误消息...您知道这里的问题是什么吗?

Powershell 脚本

#####################
# Setup
#####################

$image = "./example3.png"
$out = "./result.png"
$outPalette = "./palette.png"

$size = 50
$fuzz = 50
$colors = 6
$resizedSize = "$($size)x$($size)`!"
$histogramSize = "$($size)x$($size)"

#####################
# Program
#####################

Write-Host ""

# 1) Scale + change depth + remove unwanted colors (b/w)
Write-Host "- Step 1..." -ForegroundColor Green
magick convert $image -scale $resizedSize -depth 8 `
    -fuzz $fuzz -transparent black -transparent white `
    $out

#2) create histogram with the help of the sparse colors
Write-Host "- Step 2..." -ForegroundColor Green
$dataHistogram = magick convert -size $histogramSize xc: -sparse-color voronoi ( magick convert $out sparse-color: ) +dither -colors $colors -depth 8 -format %c histogram:info:

# ... more ...

编辑:调整

  • magick convert 替换为magick
  • $fuzz = 50 替换为$fuzz = "50%"
  • $size = 50 替换为$size = 100

现在可以使用更多图片,但例如以下仍然失败并出现相同的错误:

编辑2:

内部 magick 命令 (magick convert $out sparse-color:) 的结果如下所示:

# ImageMagick pixel enumeration: 100,100,255,srgba
0,0: (87,72,86,0)  #57485600  srgba(87,72,86,0)
1,0: (105,81,91,0)  #69515B00  srgba(105,81,91,0)
...

【问题讨论】:

  • 请注意magick convert ... 几乎总是错误的stackoverflow.com/a/61208844/2836621
  • 请注意,-fuzz 最好与 百分比 一起使用,而不是绝对值,因为 red +/- 50 在 0 范围内的 8 位图像上非常不同。 255 相对于 red +/-50 在 0..65535 范围内的 16 位图像上。
  • 谢谢 - 看来我对 fuzz 的重视是问题所在……第一次测试表明,使用 50%(我实际上想要)可以解决问题
  • @MarkSetchell 我进行了您提到的调整,并将此信息添加到我的问题中 - 我现在仍然看到此错误,还有其他想法吗?
  • 你能把实际的错误信息编辑成你的问题吗?另外,我不知道powershell 语法。我假设magick ...(magick ...) 使用内部magick 命令的结果运行外部magick 命令?如果是这样,您能否将内部 magick 命令的结果分开 - 仅用于调试目的。

标签: imagemagick imagemagick-convert


【解决方案1】:

我不确定powershell 发生了什么,但如果问题是命令行的长度,您可以从这样的文件中提供稀疏颜色:

magick -size 800x600 xc: -sparse-color voronoi @colors.txt result.png

或者像这样在stdin 上:

echo "10,10 red 200,200 yellow" | magick -size 800x600 xc: -sparse-color voronoi @- result.png

【讨论】:

  • 其实我试过了。我什至在命令行上尝试过,但我找不到适用于 Windows 的语法。例如。以下作品:magick -size 100x100 xc: -sparse-color voronoi "0,0 #57485600 1,0 #69515B00 2,0 #78566000 3,0 #835E6700 4,0 #95666F00" test.png。将此命令中完全相同的文本放入文本文件并运行 magick -size 100x100 xc: -sparse-color voronoi @colors2.txt test.png 将失败并显示 invalid number of Arguments @error/operations.c/SparseColorOptions/252...
  • 感谢您的耐心和花时间提供帮助 - 我发现了为什么通过文件提供数据不起作用 - 我在导出时忘记定义正确的编码。将其编码为 UTF-8 或 ASCII 并通过@colors.txt 进行读取工作
猜你喜欢
  • 2023-03-15
  • 2012-02-09
  • 2019-08-19
  • 1970-01-01
  • 2018-07-19
  • 2016-04-17
  • 2012-09-24
  • 2018-10-03
相关资源
最近更新 更多