记录一篇关于图像处理的模块,工作中有些场景可能用得上.
1.安装mini_magick
通过gem(ruby的包管理工具)安装就好:gem install mini_magick
注意: 如果在运行代码时,报错了我这里列举两个错误,大家可以参考一下
`rescue in validate!': You must have ImageMagick or GraphicsMagick installed (MiniMagick::Invalid)
- 上面的错误是说你缺少依赖,因为用的是mac,所以我们这边直接装就好了,“ImageMagick”和“GraphicsMagick”装一个就好:
brew install ImageMagick
Reason: tried: '/opt/homebrew/opt/glib/lib/libglib-2.0.0.dylib' (no such file)
- 这个错误可能跟你上面安装ImageMagick缺少了一个glib依赖,我们这边手动装一下就好了:
brew install glib
2.使用图像处理模块
2.1获取图像实例的方式
文件名: get_image_instance.rb
# 引入图像处理模块
require 'mini_magick'
# 1.通过文件路径和名称获取实例
img = MiniMagick::Image.open('./login.png')
# 2.通过流的方式获取图像实例
image = File.open './login.png'
file_img = MiniMagick::Image.read image
# 有人会问这里为什么要多此一举,实际上不是,第二种方式想表明的是你可以通过传入base64字符串获取图像实例,有时候我们截图之后我们可以直接拿到base64字符串,就不需要本地去保存,节省我们的io
2.2获取一些图像的属性
文件名: get_attribute.rb
# 引入图像处理模块
require 'mini_magick'
# 获取图像实例(同文件目录下放一张login.png的图片)
img = MiniMagick::Image.open('./login.png')
# 列举一些常用的
# 查看图像的长宽
w,h = img[:width],img[:height]
p w, h
# 查看图像大小
p img[:size]
# 查看图像类型
p img[:type]
# 查看图像数据
p img[:data]
# 查看图像详情
p img[:details]
2.3对图像进行裁剪
文件名: crop_example.rb
# 引入图像处理模块
require 'mini_magick'
# 获取图像实例(同文件目录下放一张login.png的图片)
img = MiniMagick::Image.open('./login.png')
# 对图片中特定位置的图像进行裁剪
# width(图像宽度), height(图像高度), left(图像距离左边框的距离), top(图像距离上边距的距离)
# img.crop("widthxheight+left+top")
img.crop("500x500+500+500")
# 将裁剪的结果图片保存到指定路径中
img.write("./login.png")
2.4图像重叠
文件名:overlapping_images.rb
# 引入图像处理模块
require 'mini_magick'
# 同目录下准备你要重叠的两张图片
first_image = MiniMagick::Image.open "./first.jpg"
second_image = MiniMagick::Image.open "./second.jpg"
result = first_image.composite(second_image) do |c|
c.compose "Over" # 设置让second图像在first上方
c.geometry "+20+20" # 将 second_image 从 (20, 20) 复制到 first_image
end
# 将裁剪的结果图片保存到指定路径中
result.write "./output.jpg"
3.学习链接
详细文档: https://rubydoc.info/gems/mini_magick/MiniMagick/Image