如何使用Imagemagick或PIL绘制高质量的图像笔触(边界)?

时间:2019-06-03 12:47:20

标签: python image-processing imagemagick python-imaging-library

我试图将图像笔划(边框)绘制到png图像上。 original ph_res
(*由Photoshop预期的19px笔触图层样式结果)

,我从imagemagick论坛中找到了有用的脚本。 (imagemagick discourse

convert source.png -background '#2a7940' -alpha background -channel A -blur 9x11 stroked.png

但是我最好的尝试离Photoshop结果还很远。 im_res

我尝试了Radius * Sigma的许多组合,但似乎是模糊技巧的最佳结果。.(-blur 9x11对此)

问题
*我可以通过Imagemagick或PIL或其他CLI工具获得更好的图像笔划吗?
*如果是这样,怎么..?
非常感谢您阅读此问题。

3 个答案:

答案 0 :(得分:3)

当需要在使用ImageMagick创建的效果上需要干净的边缘时,可以将输入图像的大小加倍,运行操作,然后将其调整为原始输入大小。运行这些操作需要更长的时间,但结果可以得到显着改善。这是一个示例命令...

convert bomb-source.png -write mpr:in -resize 200% \
   -channel A -morphology dilate disk:38 +channel \
   -fill green -colorize 100 -resize 50% mpr:in -composite result.png

该命令首先读取输入图像并将副本存储在名为“ mpr:in”的内存寄存器中。

然后将输入大小调整为200%,并使用“ -morphology”将形状扩大38像素左右。在将图像缩小到其输入大小后,这将可以处理大约19个像素。

接下来,它将新形状着色为绿色,并将其大小调整为50%,恢复到原始大小。

该命令通过恢复原始图像的“ mpr:in”副本并将其组合到修改后的绿色部分上来结束。

增加大小,进行修改并在修改后减小大小称为“超级采样”。这是一种常见的技术,可以使边缘更平滑,但是却要牺牲速度。

已编辑以添加输出图像... enter image description here

答案 1 :(得分:2)

这可能会让您入门:

  "ErrorLog": {
    "Using": [ "Serilog.Sinks.File" ],
    "MinimumLevel": "Debug",
    "WriteTo": [
      {
        "Name": "File",
        "Args": {
          "path": "c:\\temp\\error-.log",
          "rollingInterval": "Day",
          "restrictedToMinimumLevel": "Error"
        }
      }
    ]
  },
  "AuditLog": {
    "Using": [ "Serilog.Sinks.File" ],
    "MinimumLevel": "Debug",
    "WriteTo": [
      {
        "Name": "File",
        "Args": {
          "path": "c:\\temp\\audit-.log",
          "rollingInterval": "Day",
          "restrictedToMinimumLevel": "Information"
        }
      }
    ]
  }

enter image description here

如果您的中央图像包含黑色,则最后的 var errorLogConfiguration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true) .AddEnvironmentVariables() .Build(); var errorSection = errorLogConfiguration.GetSection("ErrorLog"); var auditSection = errorLogConfiguration.GetSection("AuditLog"); _log = new LoggerConfiguration() .ReadFrom .ConfigurationSection(errorSection) .CreateLogger(); _auditLog = new LoggerConfiguration() .ReadFrom .ConfigurationSection(auditSection) .CreateLogger(); 并不是最佳选择,所以我会考虑更多...

如果在单词convert bomb-source.png \ \( +clone -alpha extract -morphology edge-out disk:19 -fill green -opaque white \) \ -compose lighten -composite -transparent black result.png 后面添加-transparent black,将得到一个名为-write stroke.png的新文件,该文件向您显示了形态学。

答案 2 :(得分:2)

这是我使用-blur对ImageMagick中的笔划进行抗锯齿的另一种方法。

输入:

enter image description here

Line1 - read input
Line2 - clone it and make it fully opaque green
Line3 - clone the input, extract the alpha channel, dilate it to 19 or 20, then blur by 0x1 to antialias and use -level to remove the inner side of the blur
Line4 - put the dilated alpha into the alpha channel of the green image
Line5 - remove the temporary clones, swap the remaining two images and overlay the original over the green
Line6 - write the output

convert bomb-source.png \
\( -clone 0 -alpha off -fill green -colorize 100 \) \
\( -clone 0 -alpha extract -morphology dilate disk:20 -blur 0x1 -level 50x100% \) \
\( -clone 1,2 -compose copy_opacity -composite \) \
-delete 1,2 +swap -compose over -composite \
result.png

enter image description here

如果您需要更多的抗锯齿功能,请将模糊度提高到0x2。

对于ImageMagick 7,将convert替换为magick。