Read/write access to PNG images in pure Ruby.
This repository is empty
Translated by AI, submit an issue feedback
ChunkyPNG
这个库可以读写PNG文件,并且完全用Ruby编写,以实现最大的跨平台性。换句话说,它不需要RMagick或其他任何可能导致内存泄漏的图像库。
功能
- 解码PNG标准允许的所有图像,包括所有标准颜色模式、各种位深度、所有透明度、交错和过滤选项。
- 编码支持所有颜色模式(真彩色、灰阶、索引色)及所有这些颜色模式的透明度。会自动根据使用的颜色数量选择最佳的颜色模式。
- 对图像像素的读写访问。
- 对存储在块中的所有图像元数据的读写访问。
- 内存效率高(每个像素使用Fixnum类型,即4或8字节内存,取决于硬件)
- 按照Ruby的标准,通过仅使用整数数学和高度优化的保存程序,速度相当快。
- 支持当前所有版本的Ruby(2.5+)
- 如有必要,可与RMagick互操作。
另外,请查看 OilyPNG,这是一个C语言实现的混合模块,实现了部分ChunkyPNG算法,显著提升了编码和解码的速度。
使用方法
require 'chunky_png'
# 创建一个全新的图像并保存为交织PNG
png = ChunkyPNG::Image.new(16, 16, ChunkyPNG::Color::TRANSPARENT)
png[1,1] = ChunkyPNG::Color.rgba(10, 20, 30, 128)
png[2,1] = ChunkyPNG::Color('black @ 0.5')
png.save('filename.png', :interlace => true)
# 通过alpha混合合成图像
avatar = ChunkyPNG::Image.from_file('avatar.png')
badge = ChunkyPNG::Image.from_file('no_ie_badge.png')
avatar.compose!(badge, 10, 10)
avatar.save('composited.png', :fast_rgba) # 强制使用快速保存方法
# 访问元数据
image = ChunkyPNG::Image.from_file('with_metadata.png')
puts image.metadata['Title']
image.metadata['Author'] = 'Willem van Bergen'
image.save('with_metadata.png') # 覆盖原文件
# 低级别访问PNG块
png_stream = ChunkyPNG::Datastream.from_file('filename.png')
png_stream.each_chunk { |chunk| p chunk.type }
你还可以查看John Davison在ChunkyPNG网站上的首页屏幕录制教程,其中演示了该库的基本用法。
安全警告
ChunkyPNG易受到解压炸弹攻击,这意味着加载特定构造的PNG文件时可能会耗尽内存,从而遭受拒绝服务攻击。由于库本身的纯Ruby特性,很难从库本身修复这个问题。
为了安全处理不受信任的图像,你应该在单独进程中使用ChunkyPNG进行图像处理,例如通过fork或者使用后台处理库。
关于
该库由Willem van Bergen为Floorplanner.com编写,并在MIT许可下发布(见LICENSE)。如有问题或建议,请联系我。
通常认为此库功能完备。我很乐意接受用于修复错误和提高性能的补丁,但对新功能或API端点的接纳较为谨慎。在贡献之前,请阅读CONTRIBUTING.rdoc,其中详细解释了这一点。
请查阅CHANGELOG.rdoc了解所有版本的变化情况。
P.S.:这个库的名字故意与Chunky Bacon和Chunky GIF相似。如果想知道原因,可以用Google搜索一下。😃