RMagick - 如何找出图片的像素尺寸?

21

如何查找图像的宽度和高度(以像素为单位)?

image.x_resolutionimage.y_resolution因某些原因都返回0。


x_resolutiony_resolution是与输出设备有关的属性,例如每英寸像素数。 - Neil Slater
2个回答

54
require 'rmagick'
img = Magick::Image.ping( 'demo.png' ).first
width = img.columns
height = img.rows

注意,从评论中导入了.ping方法。如果您需要读取图像以处理它,则可以使用Magick :: Image.read('demo.png').first - 在此独立代码中使用ping可加快某些图像类型的处理速度,其中IM只需读取标题块。这在您无需加载图像本身即可对其进行工作的情况下非常有用。


2
如果您只对图像元数据感兴趣,而不关心像素数据,则应该使用ping而不是read。请参阅[文档页面](http://www.imagemagick.org/RMagick/doc/ilist.html#ping)。 - Kelvin
1
我认为稍微清晰一些:img = Magick::Image.read('demo.png')[0]; width, height = image.columns, image.rows - mahemoff
1
@mahemoff:编辑后删除了多余的 [0]。答案实际上与略微晦涩的方法名 columnsrows 有关……你完全可以自行决定如何使用它们。 - Neil Slater
这只是我的个人看法 - 我对它只读取部分标题块以报告此数据的说法持怀疑态度。我基于客户体验加载了16张图片,每张都是JPG格式,而“ping”的时间范围从0.023秒到1.25秒不等 - 如果只读取了一个小标题,则预计这应该更加一致,并且绝对不超过1.25秒。 - Nathan Crause
@Nathan:这可能取决于文件格式,JPEG对于文件头信息的支持在文件的便利部分可能是可选的——在编写文件时决定。如果你读取一个文件需要1.25秒(即使整个文件都被读取,其大小也应该小于100MB),那么很可能还有其他问题。 - Neil Slater
显示剩余4条评论

-3

该用户明确要求Rmagick,而您给出了ImageMagick的答案。尽管他/她可以从中找到答案,但这不是您应该回答问题的方式。 - defiant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接