chunky_png:纯Ruby编写的PNG文件读写库,支持多种颜色模式与元数据操作

Read/write access to PNG images in pure Ruby.

Branch1Tags68
This repository is empty

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网站上的首页屏幕录制教程,其中演示了该库的基本用法。

更多详情请参阅项目维基RDOC文档

安全警告

ChunkyPNG易受到解压炸弹攻击,这意味着加载特定构造的PNG文件时可能会耗尽内存,从而遭受拒绝服务攻击。由于库本身的纯Ruby特性,很难从库本身修复这个问题。

为了安全处理不受信任的图像,你应该在单独进程中使用ChunkyPNG进行图像处理,例如通过fork或者使用后台处理库。

关于

该库由Willem van Bergen为Floorplanner.com编写,并在MIT许可下发布(见LICENSE)。如有问题或建议,请联系我。

通常认为此库功能完备。我很乐意接受用于修复错误和提高性能的补丁,但对新功能或API端点的接纳较为谨慎。在贡献之前,请阅读CONTRIBUTING.rdoc,其中详细解释了这一点。

请查阅CHANGELOG.rdoc了解所有版本的变化情况。

P.S.:这个库的名字故意与Chunky Bacon和Chunky GIF相似。如果想知道原因,可以用Google搜索一下。😃

Introduction

使用纯Ruby实现对PNG图像的读写访问。【此简介由AI生成】

Customize your domain
241.07 K104Visit GitHub