RMagick对图片操作

声明:本人不亲日,仅参考代码

指定縦横サイズに収めるリサイズ

次に,若干特殊なリサイズといいますか,実際にウェブサイトを作る上で使われやすい,縦横サイズを指定してその範囲に収まる画像を作る方法について説明します。

単純に縦横指定でリサイズする

手始めにresizeメソッドにそのまま指定サイズを放り込んだ場合は,以下のようになります。

image = Magick::Image.read('original.png').first
image.resize!(width,height)
image.write('just_resize.png')

目的はぎりぎり満たしたと言えなくもないですが,指定サイズと元画像サイズの縦横比が異なるため画像が歪んでしまっています。

図3 just_resize.png

図3 just_resize.png

ほとんどの場合,これではOKが出ないと思いますので,画像を歪ませない方法を続いて紹介していきます。

縦横比固定でリサイズする

rmagickにはresize_to_fitという便利なメソッドがあるのでこれを使います。上の例との違いは利用するメソッドを変えただけですが,これだけで元画像の縦横比を維持したまま指定サイズに収まる画像を得るという目的を果たすことができます。

image = Magick::Image.read('original.png').first
image.resize_to_fit!(width,height)
image.write('resize_to_fit.png')

縦横比を固定しているため,指定サイズぴったりにはなっていませんが,これを問題としないシステムも多いかと思います。

図4 resize_to_fit.png

図4 resize_to_fit.png

もちろん問題となるケースもありますので続いて,縦横比を維持しつつ指定サイズぴったりにする方法を何種類か紹介したいと思います。

画像の一部を切り抜く

画像の一部を切り抜く場合にはcropメソッドを利用します。このメソッドは,リサイズはせずに画像の一部だけを取り出しているため,目的によってはこのほうが望ましいこともあるのではないでしょうか。

image = Magick::Image.read('original.png').first
image.crop!(Magick::CenterGravity,width,height)
image.write('crop.png')

どの部分を切り抜くかは第1引数で指定し,たとえば左上で切り抜きたい場合はNorthWestGravityを指定します(サンプルは画像中央を切り抜いています)。また,引数の指定の仕方によってはどのピクセルから切り抜くかを直接指定することもできます。

図5 crop.png

図5 crop.png

リサイズしつつ画像の一部を切り抜く

リサイズしつつ画像の一部を切り抜く,ということで,resizeメソッドとcropメソッドを両方使えばよいわけですが,自分でそのコードを記述しなくても,一括して処理してくれるresize_to_fillメソッドがあります。

image = Magick::Image.read('original.png').first
image.resize_to_fill!(width,height)
image.write('resize_to_fill.png')

このメソッドは元画像の縦横と指定縦横サイズを比較して,縦と横のうち比率が小さいほう(今回のサンプルだと,縦450/160=2.8125,横600/160=3.75なので,縦)が指定サイズに合うようにリサイズし,もう一方向を切り抜きます。つまり,左右または上下のどちらかだけが切り落とされることになります。

このとき切り抜く位置は第3引数で指定可能で,デフォルトはCenterGravity(中央切り抜き)です。cropメソッドと引数の順番が違うので気をつけてください。

なお,切り抜き開始ピクセルを指定することができないため,そのような場合は自力でやる必要があります。

図6 resize_to_fill.png

図6 resize_to_fill.png

リサイズ後足りない部分を継ぎ足す

最後に,リサイズ後足りない部分を継ぎ足す例を通して,change_geometryメソッドを用いる少し複雑な例を紹介します。

image = Magick::Image.read('original.png').first
image = image.change_geometry("#{width}x#{height}") do |cols,rows,img|
  img.resize!(cols,rows)
  img.background_color = 'black'
  img.extent(width,height,(width-cols)/2,(height-rows)/2)
end
image.write('resize_extent.png')

まずはchange_geometryというメソッドを使います。このメソッドは引数として渡した条件(サンプルコードではここまでやってきたのと同じ指定サイズに収まるという条件)を満たす縦横サイズを計算して,その値を元にblockを処理するというものです。
計算結果はblockの引数として渡されます。ちなみに,第3引数はchange_geometryを呼ばれた画像そのものです。
今回はこの計算結果(cols,rows)を元に普通にresizeを行い(ここまでだとresize_to_fitと同じです),次にextentメソッドを使って継ぎ足しを行います。extentメソッドではgravityによる位置指定はできないため,自分で画像が中央に来るように計算して値を指定しています。また,背景色で継ぎ足しますので事前にbackground_colorを指定しています。ここではサンプル画像のわかりやすさから 'black'を指定していますが,'transparent'または'none'を指定すれば透明色を足すことができます(もちろん,画像形式が透明色を許していればですが)。

change_geometryメソッドはリサイズするために必要な計算を行ってくれ,実際のリサイズ方法を自分で決められるため,複雑なリサイズを行いたい場合には非常に便利です。

なお,細かい部分ですがchange_geometryの戻り値はblockの戻り値になります。そのためサンプルコードではextentメソッドの戻り値になるのですが,extentには破壊メソッドがありませんので戻り値をimageに上書きするということをしています。

図7 resize_extent.png

図7 resize_extent.png

まとめ

今回は,RMagickを用いた画像処理の中で,リサイズに焦点をあて紹介しました。次回は,RMagickのクラスのひとつであるImageListの使い方やそれを用いたアニメGIFの処理方法について紹介したいと思います。

rmagick-2.16.0.gem 安装redmine-3.2.3 ruby on rails 下的插件 rmagick 2.16.0 gem 立即下载

相关推荐

ArcMap实战:用栅格计算器搞定16年NDVI趋势分析,附完整F检验流程

本文详细介绍了如何使用ArcMap的栅格计算器进行16年NDVI趋势分析,包括数据预处理、线性趋势计算和F显著性检验的全流程操作。通过实际案例和统计原理解析,帮助GIS从业者掌握植被覆盖变化的分析方法,特别适合生态评估和农业监测应用。

weixin_29251567的博客 252

安装RMagick遇到的问题及解决办法

 今天为两台机器192.168.100 .231 CentOS release 3.6 (Final)192.168.100.234   CentOS release 4.3 (Final)安装Rmagick 后台发现 要安装Rmagick必须 先安装 ImageMagic或者GraphMagic,通过convert -version查看,幸

pwlazy的专栏 4799

Power BI常见问题篇1:无法打开文档

Power BI常见问题篇1:无法打开文档

weixin_48273257的博客 3304

5分钟部署Qwen3.8-Flash-Next-NVFP4:Blackwell B200/B300上vLLM快速上手指南

Qwen3.8-Flash-Next-NVFP4 是 NVIDIA 用 Model Optimizer 对阿里 125B MoE 多模态大模型 Qwen3.8-Flash-Next 做 NVFP4 混合精度量化的推理检查点:支持文本、图片、视频输入,原生 262K 上下文,基于 vLLM 在 Blackwell B200/B300 上即可一键部署。本文带你 5 分钟完成部署、测试与进阶加速。 #

gitblog_00481的博客 372

从零到一:YOLOv11高帧率模型在RDK X5上的ONNX转换与部署实战

本文详细介绍了将最新的YOLOv11高帧率模型部署到地平线RDK X5开发板的完整实战流程。内容涵盖从PyTorch模型导出ONNX、地平线工具链环境配置与模型量化编译,到编写高效的板端推理代码,并针对高帧率目标进行了后处理优化。通过实战避坑指南,帮助开发者在RDK X5上实现30FPS以上的实时目标检测。

weixin_29089057的博客 139

第2章 数据库关系模型-单元测验-数据库原理及应用

第2章 数据库关系模型---数据库与机器学习 作业 常用的关系查询操作包括选择、投影、连接、并、交等。 v 实体完整性是指关系表的属性组成必须是完整的。 x 自然连接是一种等值连接。 v 在参照完整性中,可以定义级联操作。 v 用户自定义完整性可以实施数据的业务约束。 v 每个关系是一个二维表,但二维表不一定是关系。 v 关系中复合键至少包含两个属性。 v 代理键是为了唯一标识关系的不同元组,需要在表单或报表中显示出来。 x ...

aiqq136的博客 5723

RuView cog-ha-matter 全解析:把 Home Assistant + Matter 集成打包成 Cognitum Seed 可安装 Cog(ADR-116)

本文是 RuView 架构决策 **ADR-116(`cog-ha-matter`)** 的技术全景解读。RuView 用普通 WiFi 信号做空间智能、生命体征监测与人员存在检测(不依赖任何摄像头像素),而本文聚焦其中一层关键交付形态:**如何把 ADR-115 已经实现的 Home Assistant + Matter MQTT 集成,从"聚合器上的一个 `--mqtt` 启动开关"升级为"C

gitblog_00668的博客 382

NRF52832调试方法1——HardFault_Handler问题定位

一、遇到问题 keil debug模式下,直接点击全速运行(Run)发现程序卡死,点击stop按钮后,停到了HardFault_Handler位置,如下图所示。 此时使用navigate backwards(蓝色左箭头)是无效的,找不到程序卡在哪里。 二、解决办法 此时首先观察register窗口 若Stack为MSP,则复制R13(SP)的值到memory观察窗的地址搜索栏。每一行显示连续的28个地址上的存储信息,每个地址上存有一个字节。 从第21个位置起的连续四个字节是LR的值,

小梁的博客 3650

RMagick 简介

RMagick 是一个将 Ruby 语言绑定到 ImageMagickTM 的图像操作库。下面是 ImageMagick 网站对 ImageMagick的描述: ImageMagickTM... is a free software suite to create, edit, and compose bitmap images. It can read, convert and writ...

my blog 317

星敏感器:卫星姿态测量的“星空导航仪”

在卫星、航天器和深空探测器的姿态控制系统中,星敏感器(Star Tracker) 是最精确的姿态测量设备之一。它通过识别恒星的位置,计算出航天器在惯性空间中的三轴姿态,精度可达 角秒级(arcsecond),是许多高精度任务(如遥感、天文观测、深空探测)的核心传感器。

ScilogyHunter的博客 3694

养龙虾之_因特尔UHD/ULtra/Arc核显跑大模型_安装ollama_跑qwen3.5:0.8b/9b_使用copaw1.0.1测试_并配置copaw技能效果炸裂---AI大模型应用探索0019

摘要:本文探讨了利用Intel UHD770核显运行大语言模型的可能性。通过使用Intel发布的ipex-llm项目工具包,成功在核显上运行了Qwen3.5系列模型。测试发现0.8B小模型运行流畅(3-5秒响应),但智能程度有限;而9B大模型虽然效果更好,但响应时间长达2分钟,且GPU/CPU占用率不高。实验证明Intel核显确实可以运行LLM,但实际效果和性能表现仍有提升空间,特别是对大模型的支持尚不理想。

添柴程序猿的专栏 231

RMagick插件的使用方法

[color=red][b]最近研究了一下RMgic,看下来怎么使用这个插件:[/b][/color] 1.解压缩RMagick-2.12.0-ImageMagick-6.5.6-8-Q8.zip 2.安装rmagic gem install rmagick-2.12.0-x86-mswin32.gem 3.安装ImageMagick-6.5.6-8-Q8-windows-dll.exe ...

iteye_7312的博客 224

组合预测 | Python实现LSTM-XGBoost长短期记忆网络组合极限梯度提升树股票价格预测

组合预测 | Python实现LSTM-XGBoost长短期记忆网络和极限梯度提升树股票价格预测

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 2353

RMagick

[url=http://doruby.kbmj.com/nakahira_on_rails/20071227/RMagick_]http://doruby.kbmj.com/nakahira_on_rails/20071227/RMagick_[/url] はじめまして、kbmjでruby on railsの開発をしている中平です。 今回私は、RMagickというrubyで画像処理を行...

moyuan 219

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

rails3 rmagick插件用法

环境:ruby1.9.3 rails3.2 windows7 1.rmagick2.13.1插件 在gemfile中添加: gem 'rmagick', '2.13.1' 运行bundle install 就可以安装上rmagick 如果还是安装不上,就用到请看博客中wins7中的rmagick安装说明   2.model层 实现图片等比例缩放,并保存图片 require 'op...

zyn_zyn_zyn的专栏 169

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

RMagick实战案例:5个示例带你掌握Ruby图片处理精髓

想要在Ruby项目中轻松实现专业的图片处理功能吗?RMagick作为Ruby与ImageMagick图像处理库之间的桥梁,为开发者提供了强大而简单的图像处理能力。本文将带你通过5个实用的RMagick实战案例,快速掌握Ruby图片处理的核心技巧,从基础操作到高级特效,让你在项目中轻松应对各种图像处理需求。🚀 ## 一、基础图片加载与保存:入门第一步 使用RMagick处理图片的第一步就是加载

gitblog_00351的博客 902

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

「ruby」使用rmagick处理图像

安装rmagick gem A new release 2.13.2 of RMagick is now available on github as well as rubygems. This release will fix the installation issues due to ruby 1.9.3 and ImageMagick 6.8+. You can in...

weixin_34279061的博客 319

Rails中rmagick库的简单用法

首先rmagick是一个图形处理库,需要ImageMagick的支持.在安装了imagemagick库之后,你可以直接用如下命令查看其所支持的图片格式:convert -version #输出如下: Version: ImageMagick 6.9.7-9 Q16 x86_64 2017-02-18 http://www.imagemagick.org Copyright: © 1999-2017

享受开发,颠倒银河 1463

ruby图片处理

  我们经常要处理图片,比如搞个什么头像缩略图,在所难免要对图片进行裁剪、缩放等操作,下面就来总结一下Ruby中图片裁剪、缩放的类库。   ImageScience: 实现图片放缩的库,使用前需安装freeimage和rubyinline。 网址:http://seattlerb.rubyforge.org/ImageScience.html   RMagic...

iteye_6945的博客 683

「ruby/MiniMagick」用MiniMagick处理图片

包的选择和配置 想用RMagick,但据说内存泄露的问题比较厉害,作为替代品MiniMagick不存在内存泄露的问题。而二者都是使用ImageMagick的,所以需要下载并安装ImageMagick。 下面安装ImageMagick: sudo apt-get install imagemagick 安装gem··「mini_magick」 gem install mi...

weixin_30832983的博客 255

Ruby版给图片加水印

ImageUtils.rb [code="ruby"] #!/usr/local/bin/ruby require 'logger' module ImageUtils attr_accessor :watermarkText attr_accessor :watermarkResourceUri attr_accessor :watermarkFont at...

326

字符串转化为艺术字图片

需求 在平时我们有没有这种需求,把一段文字用艺术字显示,并且可以保持成图片 例如我们在新浪微博中 所见到的 如:(http://ww1.sinaimg.cn/bmiddle/dd0b97bbjw1e803gixiy6j20c83gvqtp.jpg 使用说明 使用很简单:在控制台中输入 > ruby 程序文件名 字符文件名 即可 如 ruby text-img.rb tes

Men-DD 3686

RMagick高级特性:深入了解图片合成、滤镜与特效实现

RMagick是Ruby语言中最强大的图像处理库之一,它为Ruby开发者提供了完整的ImageMagick功能接口。通过RMagick,你可以轻松实现复杂的图片合成操作、应用各种滤镜效果,并创建令人惊艳的视觉特效。本文将深入探讨RMagick的高级功能,帮助你掌握专业的图像处理技术。😊 ## 为什么选择RMagick进行高级图像处理? RMagick不仅仅是简单的图片缩放和裁剪工具,它提供了

gitblog_00089的博客 1006

RMagick性能优化指南:提升Ruby图片处理效率的7个秘诀

RMagick作为Ruby语言的ImageMagick绑定库,为开发者提供了强大的图片处理能力。然而,在处理大量图片或高分辨率图像时,性能问题常常成为瓶颈。本文将分享7个经过实践验证的性能优化技巧,帮助你显著提升RMagick图片处理效率,减少内存占用并加快处理速度。 ## 1. 合理调整图片尺寸:从源头减少数据量 图片尺寸是影响处理性能的首要因素。在实际应用中,大多数场景不需要原始分辨率的图

gitblog_00993的博客 644
上一篇: Observer 的使用
下一篇: 使用Lucene简单生成摘要
chenbinGood
博客等级 码龄18年 2粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值