在图像处理方面,Python是一门广泛使用的编程语言。每当我们为建立模型处理图像数据时,对图像的预处理是至关重要的。在预处理中,我们确保图像具有正确的尺寸和正确的类型。除了pilllow、opencv等,ImageMagick处理图像也很方便。
Imagemagick简介
ImageMagick可创建、编辑、编排或转换位图图像。它可以读取和写入各种格式的图像(超过200种),包括PNG、JPEG、GIF、HEIC、TIFF、DPX、EXR、WebP、Postscript、PDF和SVG等。使用ImageMagick来调整大小、翻转、镜像、旋转、扭曲、剪切和转换图像,调整图像颜色,应用各种特殊效果,或绘制文本、线条、多边形、椭圆和贝塞尔曲线。
ImageMagick的通常在命令行中使用,或者你可以从用你喜欢的编程语言编写的程序中使用这些功能。比如PythonMagick(Python),G2F(Ada),MagickCore(C),MagickWand(C),ChMagick(Ch),ImageMagickObject(COM+),Magick++(C++),JMagick(Java),L-Magick(Lisp),NMagick(Neko/haXe),MagickNet(。 NET)、PascalMagick(Pascal)、PerlMagick(Perl)、MagickWand for PHP(PHP)、IMagick(PHP)、、Magick(R)、RMagick(Ruby)或TclMagick(Tcl/TK)。
ImageMagick利用多个计算线程来提高性能,可以读取、处理或写入百万、千兆或兆像素的图像尺寸。
ImageMagick的官网是https://imagemagick.org。源代码库是https://github.com/ImageMagick/ImageMagick。
Imagemagick能做什么?
- 格式转换:格式转换(如PNG转换成JPEG)。
- 转换:调整大小、旋转、纠偏、裁剪、翻转或修剪图像。
- 透明度:使图像的某些部分不可见。
- 绘制:在图像上添加形状或文字。
- 装饰:为图像添加边界或框架。
- 特效:对图像进行模糊、锐化、阈值或调色。
- 文本和评论:在图像中插入描述性或艺术性文本。
- 图像渐变:创建一种颜色的渐变混合,其形状是水平、垂直、圆形或椭圆形的。
- 图像识别:描述图像的格式和属性。
- 复合:将一个图像重叠在另一个图像上。
- 蒙太奇:将图像缩略图并列在一个图像画布上。
- 通用像素失真:纠正或诱导图像失真,包括透视。
- 形状的形态学:提取特征,描述形状和识别图像中的模式。
- 划分图像特征。Canny边缘检测,平均移动,Hough线。
- 电影支持:读和写数字电影工作中使用的常见图像格式。
- 图像计算器:将一个数学表达式应用于图像或图像通道。
- 连接部件标记:唯一地标记图像中的连接区域。
- 离散傅里叶变换:实现正向和逆向DFT。
- 感知散列:将视觉上相同的图像映射为相同或相似的散列--在图像检索、认证、索引或复制检测以及数字水印中很有用。
- 复杂文本布局:双向文本支持和塑造。
- 色彩管理:用色彩配置文件进行精确的色彩管理,或代替--根据色彩空间的要求进行内置的伽玛压缩或扩展。
- 双边模糊:非线性的、保留边缘的、降噪的平滑过滤器。
- 高动态范围图像:准确地表现真实场景中发现的广泛的强度水平,从最明亮的阳光直射到最深的黑暗阴影。
- 加密或破译图像:将普通图像转换为无法理解的胡言乱语,然后再转换回来。
- 虚拟像素支持:方便访问图像区域外的像素。
- 大图像支持:读取、处理或写入百万、千兆或兆像素的图像尺寸。
- 执行线程的支持。ImageMagick是线程安全的,大多数内部算法都支持OpenMP,以利用多核处理器芯片提供的速度优势。
- 分布式像素缓存:将中间的像素存储卸载到一个或多个远程服务器。
- 异构分布式处理:某些算法支持OpenCL,以利用在由CPU、GPU和其他处理器组成的异构平台上协同执行的速度优势。
- iPhone上的ImageMagick:在你的iPhone上转换、编辑或编排图像。
下载Imagemagick
# apt install imagemagick
# pip install wand

读取图像的尺寸
>>> from wand.image import Image
>>> ny = Image(filename ='wugang.jpg')
>>> print(ny.height, ny.width)
324 550
将图像从jpg转换成png
>>> ny_convert = ny.convert('png')
>>> ny_convert.save(filename ='wugang.png')
模糊图像
>>> ny = Image(filename ='wugang.jpg')
>>> ny.blur(sigma = 4)
True
>>> ny.save(filename ="wugang_blur.jpg")

翻转图像
>>> ny = Image(filename ='wugang.jpg')
>>> flip_ny = ny.clone()
>>> flip_ny.flip()
True
>>> flip_ny.save(filename ='flip_wugang.jpg')

旋转图像
>>> ny2 = ny.clone()
>>> ny2.rotate(45)
True
>>> print(ny2.height, ny2.width)
620 620
>>> ny2.save(filename ='rotate_wugang.jpg')

裁剪图像
>>> ny2 = ny.clone()
>>> ny2.crop(50, 90, 200, 300)
True
>>> ny2.save(filename = 'wugang_cropped.jpg')

创建边缘
>>> ny2 = ny.clone()
>>> ny2.edge(radius = 1)
True
>>> ny2.save(filename="edge_wugang.jpg")

素描
>>> ny2 = ny.clone()
>>> ny2.sketch(0.5, 0.0, 98.0)
True
>>> ny2.save(filename="wugang_sketch.jpg")

使用transform_colorspace()函数并传递'grey'作为参数。输出将是黑白素描。
>>> ny2 = ny.clone()
>>> ny2.transform_colorspace('gray')
True
>>> ny2.sketch(0.5, 0.0, 98.0)
True
>>> ny2.save(filename="wugang_sketch_gray.jpg")

灰度素描
同样,我们还可以在图像上应用其他的特殊效果,如添加噪音、polaroid、漩涡、色调、波浪、太阳化等。
调整大小
>>> ny2 = ny.clone()
>>> ny2.resize(200,100)
True
>>> ny2.save(filename="wugang_resize.jpg")

参考资料
- 本文涉及的python测试开发库 谢谢点赞!
- 本文相关海量书籍下载
- https://www.pythonpool.com/imagemagick-python/
- http://www.imagemagick.com.cn/
- https://legacy.imagemagick.org/Usage/text/
- https://www.itechlounge.net/2020/09/web-imagickexception-attempt-to-perform-an-operation-not-allowed-by-the-security-policy-pdf/
将PDF转换为图像
from wand.image import Image
ny = Image(filename ='test.pdf')
ny_converted = ny.convert('jpg')
ny_converted.save(filename='test.pdf.jpg')

添加文字水印
from wand.image import Image
from wand.drawing import Drawing
ny = Image(filename = 'wugang.jpg')
draw = Drawing()
draw.font = '/usr/share/fonts/truetype/arphic/ukai.ttc'
draw.font_size = 20
draw.text(10, 100, '技术支持钉钉或v信 pythontesting')
draw(ny)
ny.save(filename='text wuang.jpg')
linux查看中文字体
$ fc-list | grep -i cn
网友评论