ImageMagick 图像处理学习笔记
Use ImageMagick to create, edit, compose, or convert bitmap images. It can read and write images in a variety of formats (over 200) including PNG, JPEG, GIF, HEIC, TIFF, DPX, EXR, WebP, Postscript, PDF, and SVG. Use ImageMagick to resize, flip, mirror, rotate, distort, shear and transform images, adjust image colors, apply various special effects, or draw text, lines, polygons, ellipses and Bézier curves.
简单的来说,ImageMagick 就是:
ImageMagick(简称 IM)是一个支持 GPL 协议的开源免费软件包。全部源码开放,可以自由使用,复制,修改,发布。
它由一组命令行工具组成的。
它可以对超过 200 种的图像格式(包括 DPX, EXR, GIF, JPEG, JPEG-2000, PDF, PhotoCD, PNG, Postscript, SVG, 和 TIFF 等等),进行读、写、编辑和转换的操作。
它支持多数主流操作系统,其中包括 UNIX、Mac OS X 、Windows,以及 IOS、Android 等。
相比 PhotoShop 和 GIMP 提供的图形用户接口 (GUI) 编辑图像,ImageMagick 通过一组命令行工具来操作图片,更有助于批量化的图片处理。你当然可以用 PhotoShop 或 GIMP 这样的软件来处理图像。没人禁止你这么做,就像没人禁止你用大炮打蚊子一样。不过依我看,打蚊子最好还是用电蚊拍,而要处理大量图像的话,尤其当你只想批量转换一些图片格式,或者批量生成缩略图,调整分辨率,我推荐 ImageMagick。
支持的程序语言: Perl, C, C++, Python, PHP, R, 等。
ImageMagick 接口
:
PythonMagick (Python); PerlMagick (Perl);
IMagick (PHP)
;
magick (R); 等等。
1. 安装 ImageMagick
这里主要介绍一下 CentOS 7 下的 ImageMagick 安装,其他平台下的安装可以自行谷歌。
1.1 源码安装
如果你没有 root 权限,可以在 ImageMagick 安装过程中发现缺乏什么依赖,就手动去下载安装该依赖。过程可能很繁琐,环境配置起来可能也很复杂。
# 安装依赖
$ yum -y install bzip2-devel freetype-devel libjpeg-devel libpng-devel libtiff-devel giflib-devel zlib-devel ghostscript-devel djvulibre-devel libwmf-devel jasper-devel libtool-ltdl-devel libX11-devel libXext-devel libXt-devel lcms-devel libxml2-devel librsvg2-devel OpenEXR-devel php-devel
# 安装 ImageMagick
$ wget https://www.imagemagick.org/download/ImageMagick.tar.gz
$ tar zvxf ImageMagick.tar.gz
$ cd ImageMagick-7.0.10-23
$ ./configure --prefix=/data/software/imagemagick-7.0.10-23
$ make
$ make install
1.2 conda 安装
没有 root 的权限,使用 conda 安装 ImageMagick 是最快捷有效的方式,推荐使用。
$ conda search imagemagick
$ conda create -n imagemagick imagemagick
2. 使用体验
ImageMagick 的使用网络上教程非常非常多,这里就不一一再重复了,需要的自己去百度或者谷歌。说几点使用过程中的小发现。
从 ImageMagick 7 起,magick 命令替换了原来的 convert 命令,但 convert 命令依然可以使用。

- ImageMagick 6.7.8-9 版本的 convert 命令存在一些 bug,例如本人在执行 PDF→TIFF 的转换过程经常会出现一些莫名其妙的报错;升级成 7.0.10-23 的 magick 后,恢复正常!
ImageMagick 中的 convert/magick 一个命令就包含了超过 200 多个子命令(参数),功能非常强悍,也让人眼花缭乱。
- convert/magick 不同的参数排列顺序,有时候会得到截然不同的处理性能和效果,这是让人非常头疼的一个问题,有时候你都不知道这个参数到底是放在输入文件前,还是放在输入文件后!
- 正常来说,一个图片当总像素大小保持不变,提高 dpi 会导致图片的物理尺寸变小。在 ImageMagick 中以 dpi 为变量,如何保证总像素大小不变前提下,自动转换图片格式,目前没找到更好的解决方法。
3. 题外话
一般的杂志期刊对于投稿图片都是有要求的,如果想要得到发文级别分辨率和尺寸的图片,除了在画图时进行参数设置,或手动 PS 以外,或许还有一些可以自动完成这一系列操作的平台,或者 AI 神器吧!遗憾的是,目前我还没找到。
拭目以待~~

猜您喜欢 往期精选▼

本文分享自微信公众号 - 生信科技爱好者(bioitee)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
ImageMagick 图像处理学习笔记的更多相关文章
- OpenCV图像处理学习笔记-Day1
OpenCV图像处理学习笔记-Day1 目录 OpenCV图像处理学习笔记-Day1 第1课:图像读入.显示和保存 1. 读入图像 2. 显示图像 3. 保存图像 第2课:图像处理入门基础 1. 基本 ...
- OpenCV图像处理学习笔记-Day03
OpenCV图像处理学习笔记-Day03 目录 OpenCV图像处理学习笔记-Day03 第31课:Canny边缘检测原理 第32课:Canny函数及使用 第33课:图像金字塔-理论基础 第34课:p ...
- OpenCV图像处理学习笔记-Day4(完结)
OpenCV图像处理学习笔记-Day4(完结) 第41课:使用OpenCV统计直方图 第42课:绘制OpenCV统计直方图 pass 第43课:使用掩膜的直方图 第44课:掩膜原理及演示 第45课:直 ...
- 数字图像处理学习笔记之一 DIP绪论与MATLAB基础
写在前面的话 数字图像处理系列的学习笔记是作者结合上海大学计算机学院<数字图像处理>课程的学习所做的笔记,使用参考书籍为<冈萨雷斯数字图像处理(第二版)(MATLAB版)>,同 ...
- 深刻认识shift_ram IP core——图像处理学习笔记
在进行图像处理算法中,往往需要生成图像像素矩阵,这对于C语言来说可以直接用数据表示,但是对于verilog来说便不是那么容易了,硬件描述语言不比软件,它的核心不再算法,而是在于设计思想,加速硬件.在进 ...
- MATLAB数字图像处理学习笔记
我们都知道一幅图片就相当于一个二维数组,可以用一个矩阵来表示,而MATLAB可以说就是为矩阵运算而生的,所以学习图像处理,学习MATLAB势在必行! 一. MATLAB基础知识 1. 读取图像 %im ...
- CS131&Cousera图像处理学习笔记 - L4&W2滤波和卷积
cs131: http://vision.stanford.edu/teaching/cs131_fall1617/ coursera: https://www.coursera.org/learn/ ...
- OpenCV 图像处理学习笔记(一)
解读IplImage结构 typedef struct _IplImage { int nSize; /* IplImage大小 */ int ID; ...
- CS131&Cousera图像处理学习笔记 - L5边缘
cs131: http://vision.stanford.edu/teaching/cs131_fall1617/ coursera: https://www.coursera.org/learn/ ...
- C#数字图像处理算法学习笔记(一)--C#图像处理的3中方法
C#数字图像处理算法学习笔记(一)--C#图像处理的3中方法 Bitmap类:此类封装了GDI+中的一个位图,次位图有图形图像及其属性的像素数据组成.因此此类是用于处理像素数据定义的图形的对象.该类的 ...
随机推荐
- 使用golang+antlr4构建一个自己的语言解析器(一)
Antlr4 简介 ANTLR(全名:ANother Tool for Language Recognition)是基于LL(*)算法实现的语法解析器生成器(parser generator),用Ja ...
- SpringBoot集成海康网络设备SDK
目录 SDK介绍 概述 功能 下载 对接指南 集成 初始化项目 初始化SDK 初始化SDK概述 新建AppRunner 新建SdkInitService 新建InitSdkTask 新建 HCNetS ...
- vue在js公用文件中使用this
main.js 中 let $vue = new Vue({ router, el: '#app', render: h => h(App) }); export default $vue 在j ...
- QML 界面切换的几种方法(带示例代码)
QML 界面切换的几种方法(带示例代码)
- apt-get update报“Temporary failure resolving '***.com/cn'
解决办法: 1.打开/etc/resolv.conf: $sudo vim /etc/resolv.conf 2.修改nameserver即DNS服务器: 我这里使用腾讯云和阿里云的DNS 加入: n ...
- C语言结构体大小分析
title: C语言结构体大小分析 author: saopigqwq233 date: 2022-04-05 C语言结构体大小分析 一,基本类型 C语言自带的数据类型大小如下 数据类型 大小(字节) ...
- 【AIGC未来的发展方向】面向人工智能的第一步,一文告诉你人工智能是什么以及未来的方向分析
人工智能的概念 当人们提到"人工智能(AI)"时,很多人会想到机器人和未来世界的科幻场景,但AI的应用远远不止于此.现在,AI已经广泛应用于各种行业和生活领域,为我们带来了无限可能 ...
- 性能最快的代码分析工具,Ruff 正在席卷 Python 圈!
几天前,Python 开源社区又出了一个不小的新闻:HTTPX 和 Starlette 在同一天将在用的代码分析工具(flake8.autoflake 和 isort)统一替换成了 Ruff. HTT ...
- SpringBoot 整合 JDBC 实例
0.数据库表 CREATE DATABASE springboot; USE springboot; CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_ ...
- Spring自定义参数解析器设计
作者:京东零售 王鹏超 1.什么是参数解析器 @RequstBody.@RequstParam 这些注解是不是很熟悉? 我们在开发Controller接口时经常会用到此类参数注解,那这些注解的作用是什 ...