#pdf #image #successor #line #command-line #file #image-magick

bin+lib imcon

简单的图像转换器

1 个不稳定版本

0.1.1 2022年3月23日

图像 中排名 669

MIT 许可证

2MB
585

GitHub Contributors Stars Build Status Downloads Crates.io

imcon

imcon 是一个库,旨在作为 ImageMagick 的精神继承者,但具有更少的依赖项和现代的命令行界面。

目前它处于非常早期的发展阶段,但它仍在进行中。

支持的文件类型

  • PDF
  • 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请求。您也可以直接使用标签“增强”打开一个问题。别忘了给项目加星标!再次感谢!

  1. 分叉项目
  2. 创建您的功能分支(git checkout -b feature/AmazingFeature
  3. 提交您的更改(git commit -m '添加一些AmazingFeature'
  4. 将更改推送到分支(git push origin feature/AmazingFeature
  5. 打开一个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