1 个不稳定版本
0.1.1 | 2022年3月23日 |
---|
在 图像 中排名 669
2MB
585 行
imcon
imcon
是一个库,旨在作为 ImageMagick 的精神继承者,但具有更少的依赖项和现代的命令行界面。
目前它处于非常早期的发展阶段,但它仍在进行中。
支持的文件类型
- HEIC
- PNG
- JPEG
- TIFF
- GIF
- BMP
- ICO
- SVG
用法
imcon --scale 2 ~/Downloads/multipage.pdf
这将使 PDF 的尺寸加倍,并在您的当前目录中创建 png 文件(PDF 的默认格式)。
$ ls
multipage0.png
multipage1.png
multipage2.png
multipage3.png
阅读帮助以获取更多信息。
安装
您需要一份 pdfium
的副本才能读取 PDF 文件。这些说明使该库可用。
git clone https://github.com/kurtbuilds/imcon
cd imcon
# Note this requires sudo, as it installs to /usr/local/,
# which (should be) owned by root. This script is tiny
# enough that you can read it if you're especially worried
# about security.
just install_with_library
注意:如果您还没有
just
,请使用以下命令安装它:cargo install just
。
目前不支持从 cargo 进行安装。
如果您只需要 imcon
并且已经拥有 pdfium
,您可以使用以下命令安装它:
git clone https://github.com/kurtbuilds/imcon
cd imcon
just install
路线图
- 添加对 PDF 的支持
- 添加对 HEIC 的支持
- 添加对 PNG 的支持
- 添加对 JPEG 的支持
- 添加对 TIFF 的支持
- 添加对 TGA 的支持
- 添加对 BMP 的支持
- 添加对 ICO 的支持
- 添加对 SVG 的支持
- 添加对 WEBP 的支持
- 添加对命令行标志的支持
- --in-place 以替换输入文件。
- --verbose 以打印出正在发生的事情。
- --lighten
- --darken
- --blur
- 添加对元数据的支持(即打印元数据而不是创建图像)
- 支持将 imcon 作为 CLI 和库使用。
- 构建 Python 包装库。
- 构建 Node 包装库。
- 构建 Ruby 包装库。
- 编写有关 target_width/height 与 max_width/height 的文档。
- 为安装 Pdfium 创建 Brew 公式。
- 使 libheif 的构建规则更具灵活性,以便区分 libheif 的不同版本。
- 在各种转换和图像操作上的基准测试,与其他 Rust(或其他)库进行比较。
贡献
贡献使开源社区成为一个如此令人惊叹的学习、灵感和创造的地方。您做出的任何贡献都备受赞赏。
如果您有改进此项目的建议,请分叉仓库并创建一个pull请求。您也可以直接使用标签“增强”打开一个问题。别忘了给项目加星标!再次感谢!
- 分叉项目
- 创建您的功能分支(
git checkout -b feature/AmazingFeature
) - 提交您的更改(
git commit -m '添加一些AmazingFeature'
) - 将更改推送到分支(
git push origin feature/AmazingFeature
) - 打开一个pull请求
开发笔记
这些是关于在仓库中解决问题的个人笔记,并非面向公众。
-
您想要对图像执行哪些操作进行缩放?
- 将图像缩放到最大边长。(-W $size -H $size)
- 将图像缩放到特定宽度。(-w $size)
- 将图像缩放到特定高度。(-h $size)
-
您也可能只想打印元数据。
- 宽度
- 高度
-
通道
- EXIF数据
-
页面数
-
缩放图像
未来示例
创建一个透明画布。输出到标准输出。默认为.png。
imcon -w 1024 -h 1024 \#000000ff > canvas.png # can also be \#000f
imcon -w 1024 -h 1024 \#000000ff -o canvas.jpg
cat icon.png | imcon --stdin-format png --stdout-format jpg
imcon canvas.png --dominant 5
# this is the brown ugly shit.
avg_patch = np.ones(shape=img.shape, dtype=np.uint8)*np.uint8(average)
indices = np.argsort(counts)[::-1]
freqs = np.cumsum(np.hstack([[0], counts[indices]/float(counts.sum())]))
rows = np.int_(img.shape[0]*freqs)
dom_patch = np.zeros(shape=img.shape, dtype=np.uint8)
for i in range(len(rows) - 1):
dom_patch[rows[i]:rows[i + 1], :, :] += np.uint8(palette[indices[i]])
fig, (ax0, ax1) = plt.subplots(1, 2, figsize=(12,6))
ax0.imshow(avg_patch)
ax0.set_title('Average color')
ax0.axis('off')
ax1.imshow(dom_patch)
ax1.set_title('Dominant colors')
ax1.axis('off')
plt.show(fig)
DataSource {
File(Path, Format),
Memory(Bytes, Format),
Image(::image::DynamicImage),
}
imcon::Image::open("foo.pdf").save_all_pages("foo.png")
imcon::open_all("foo.pdf") -> Result<Vec<Image>
either we load the data or it's deferred.
imcon::open_all("foo.pdf") -> Result<Vec<Image>>
imcon::ImageComputation::open("foo.pdf").resize(1024, 1024).save_to_path_template
you can save from a pdf.... ok fine.
依赖项
~26–35MB
~284K SLoC