使用imagemagick生成更有趣的图像预览

2021-05-07 23:30:26

我最近与想卖数码图像的客户交谈。在画廊中,可以显示免费的,但是出售的人将完全模糊。

即使我最终没有做到这个项目,我很好奇如何生成更好的图像预览,然后就是模糊整个图像。毕竟,用户需要了解它在他们想买它之前的样子。

两个最常见的解决方案是显示一个差分差或覆盖水印的版本。两者都很容易实现和工作得很好。

我想看看是否有一种方法可以选择性地隐藏更高分辨率图像的部分,同时隐藏它不仅仅是水印。

我希望最终结果成为排序的缩短形象。用户应该“看到”它是什么。它应该看起来很有趣。但它不应该是可用的。铅图像显示我很满意的最终结果。下面是我经历的过程来实现它。

我主要使用mini_magick以复制Web应用程序如何执行这些转换。但是直接运行命令是完全可行的,事实上我在几个地方这样做。 Mini_Magick毕竟只是一个包装器,有助于构建命令。

要求' mini_magick' INPUT_FILE ="图像预览输入-1.jpg" convert = minimagick :: tool :: convert。新转换<< input_file转换。模糊(" 0x100")转换<< "普通模糊输出.jpg"兑换 。调用convert = minimagick :: tool :: convert。新转换<< input_file转换。 Gaussian_blur(" 0x100")转换< "高斯模糊输出.jpg"兑换 。称呼

正常模糊和高斯看起来几乎相同。 常规模糊更快。 自适应模糊的文档听起来像我所想到的正是:它朝着图像的边缘迷失。 然而,在仔细阅读时,我理解它将图像中的边缘较少。 模糊图像,除了靠近边缘检测在图像上定义的边缘。 例如,使颜色更顺畅,但不要摧毁图像可能具有的任何尖锐边缘。 通过产生圆梯度来实现更模糊的中心,以用作模糊的地图。 转换-size 500x750径向梯度:白色黑色图像预览 - 圈 - map.pngconvert映像 - 预览 - 输入-1.jpg映像 - previews-cirect-map.png \ -comosh blur -set选项:compose:args 10x20 -composite \ image-previews-circle-map-blur-output.png 这看起来更好,然后只是模糊整个图像。 然而,它仍然非常透露。

要求' mini_magick' INPUT_FILE ="图像预览输入-1.jpg" image = minimagick :: image。打开(input_file)size =图像。方面 。地图{| x | x}宽度=尺寸[0]高度=尺寸[1]浓度= 40#控制三角形的大小sh =高度/浓度sw =宽/浓度convert = minimagick :: tool :: convert。新转换<< input_file密度。时间做W |密度 。时间做H |兑换 。绘制(" polygon#{sw * w},#{sh * h}#{sw *(w + 1)},#{sh * h}#{sw *(w + 1)},#{ Sh *(H + 1)}")端部转换<< "输出 - 与triangles.png"兑换 。称呼

这看起来很好。图像并不是真正可用的任何东西,但同时用户可以清楚地“看到”图像是什么。

上面的脚本不会考虑由于整数划分的右侧和底部剩下的间距,但这是修复的琐碎。

接下来,如果在图像的边缘附近产生的三角形,则希望看到结果会更好。

要求' mini_magick' INPUT_FILE ="图像预览输入-1.jpg" image = minimagick :: image。打开(input_file)size =图像。方面 。地图{| x | X}宽度=尺寸[0]高度=尺寸[1]浓度= 40 sh =高度/浓度sw =宽/浓度hh =高度/ 2 hw = width / 2 convert = minimagick ::工具::转换。新转换<< input_file密度。时间做W |密度 。时间做H | c = rand prob = 1 - ((((hw to_f - (w * sw)。abs / hw。to_f)+(hh。to_f - (h * sh)。to_f)。abs / hh。to_f。 )/ 2)+ 0.1,如果c< Prob转换。绘制(" polygon#{sw * w},#{sh * h}#{sw *(w + 1)},#{sh * h}#{sw *(w + 1)},#{ Sh *(H + 1)}")端部结束转换<< "图像预览 - 输出 - 概率 - triangles.png"兑换 。称呼

对于此示例,我必须使用更大的输入图像。通过较小的图像,透明度也不会施加,并且当它们的三角形组成时会撕裂。

由于花了很长时间才能运行,我也降低了密度和模糊。

由于密度降低,我将三角形改变为多边形,以便模糊图像的较大部分。

要求' mini_magick' INPUT_FILE ="输入-1-lg.jpg" image = minimagick :: image。打开(input_file)size =图像。方面 。地图{| x | x}高度=尺寸[0]宽度=尺寸[1]密度= 10 sh =高度/密度sw =宽/浓度片段= [] hh =高度/ 2 hw =宽/ 2密度。时间做W |密度 。时间做H | c = rand prob = 1 - ((( )/ 2)如果c< Prob碎片。推({w:w * sw,h:h * sh})convert = minimagick :: tool :: convert。新转换<< input_file转换。作物("#{sh} x#{sw} +#{h * sh} +#{w * sw}")转换。模糊(" 0x200")转换。填充("黑色")转换。 draw(" polygon#{sh / sh / 2},#{sw}#{sh},#{sw}#{sh},0")#使用sh / 2而不是sh所以& #34;三角形"从中间开始,而是在角落里覆盖更多的图像转换。 Fuzz(" 15%")转换。定义(' png:color-type = 6')转换。透明("黑色")转换<< "输出裁剪 - 三角形 - #{w * sw} - #{h * sh} .png"兑换 。呼叫结束端映像= MIMIMAGICK :: Image。打开(input_file)碎片。每件事x |裁剪= minimagick :: image。新("输出裁剪 - 三角形 - #{x [:w]} - #{x [:h]} .png")结果=图像。复合(裁剪)做| C | C 。 compose"过度" C 。几何" +#{x [:h]} +#{x [:w]}"最终结果 。写"图像预览 - 输出 - 概率 - 透明 - 三角形.jpg"文件 。删除("输出 - 裁剪 - 三角形 - #{x [:w]} - #{x [:h]} .png")如果是片段。最后!= X Image = Minimagick :: Image。打开("图像 - 预览 - upporation-transpart-triangles.jpg")结束结束

在ImageMagick文档中,我找到了一个用于编写具有纹波效果的图像的示例,所以也最终尝试了。

这也看起来像一个有用的效果,但我认为它会对太多的图像混淆。

我认为模糊图像中心附近的随机多边形创造了更有趣的图像预览,然后模糊整个图像,显示出低分辨率或应用水印。