Image Magick中的透明图案拼贴会生成损坏的图案

时间:2019-01-09 11:12:29

标签: imagemagick imagemagick-convert

我正在尝试生成具有this image中的背景和图案的图像。

当前我有此命令

magick convert \
    \( \
        -size 512x512 \
        -define "gradient:vector=0,0 0,720" "gradient:#5DA2C2-#C70AA0" \
    \) \
    \( \
        -size 4x4 xc:white -alpha transparent \
        -channel alpha -fx "(1-min(1,(j+1)%2)) * 0.1" \
        -write mpr:lines1 +delete -size 512x512 tile:mpr:lines1 \
    \) -composite \
    \( \
        -size 4x4 xc:white -alpha transparent \
        -channel alpha -fx "(1-min(1,j%4)) * 0.25" \
        -write mpr:lines2 +delete -size 512x512 tile:mpr:lines2 \
    \) -composite \
    wallpaper.png

产生this。您可能会看到模式为broken(尤其是在底部)。

如果我将图案大小设置为64x64,问题就消失了,但这并不是真正的解决方法。

我在做什么错?如何在不更改图案大小的情况下解决该问题?

UPD:

完整的magick --versionconvert --version)输出:

Version: ImageMagick 7.0.8-23 Q16 x86_64 2019-01-04 https://imagemagick.org
Copyright: © 1999-2019 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI Modules OpenCL OpenMP 
Delegates (built-in): bzlib cairo fontconfig freetype gslib heic jbig jng jp2 jpeg lcms lqr ltdl lzma openexr pangocairo png ps raw rsvg tiff webp wmf x xml zlib
  

各行之间是否总是在同一行出现这些行

是的,对于每个相同的参数集,结果都是相同的(但对于稍微不同的参数集(例如,更改分辨率或从花括号中删除写命令),可能会有所不同)。

  

作为测试,请尝试保存到TIFF而不是PNG。那行得通吗   还是不?

更改输出格式始终会产生完全相同的结果。我尝试过tiff,gif,jpeg。 (使用jpeg时,这些线条明显有点模糊,但是结果看起来几乎相同)。这也适用于fmw42的命令变体。

  

您是否已在ImageMagick中安装了OpenMP。还禁用OpenCL,看看是否有帮助。

未安装OpenMP,但我拥有的IM版本支持它。 通过环境变量MAGICK_OCL_DEVICE=OFF禁用OpenCL不会更改结果。从tag = 7.0.8-23和从master重新编译带有和不带有OpenCL和OpenMP的IM-都是一样的...

  

您在tmp4.png中看到不可见的东西吗?

是的,如果我magick tmp4.png -alpha remove tmp4-opaque.png

,我仍然可以在白色背景上看到彩虹色的线

1 个答案:

答案 0 :(得分:1)

您的命令在ImageMagick 7.0.8.23 Q16 Mac OSX以及libpng 1.6.35上对我来说很好用。但是在IM 7中,请使用magick,而不要使用magick convert和not convert,否则您将获得IM 6行为。检查您的libpng版本,并在必要时进行升级。您的ImageMagick的版本和日期是什么,在什么平台上使用?

magick \
\( \
-size 512x512 \
-define gradient:vector="0,0 0,720" gradient:"#5DA2C2-#C70AA0" +write tmp1.png \
\) \
\( \
-size 4x4 xc:white -alpha transparent +write tmp2.png \
-channel alpha -fx "(1-min(1,(j+1)%2)) * 0.1" +write tmp3.png \
-write mpr:lines1 +delete -size 512x512 tile:mpr:lines1 +write tmp4.png  \
\) -composite \
\( \
-size 4x4 xc:white -alpha transparent \
-channel alpha -fx "(1-min(1,j%4)) * 0.25" \
-write mpr:lines2 +delete -size 512x512 tile:mpr:lines2 \
\) -composite \
wallpaper.png


enter image description here

检查此内容,看看是否存在相同的问题。但我看不到任何虚线。