如何用 Curtail GUI 应用压缩 Linux 中的图像

你可以使用一个成熟的图像编辑器,如 GIMP。你也可以使用像 Squoosh 这样的网络工具,这是谷歌的一个开源项目。它甚至可以让你比较每个压缩级别的文件。然而,所有这些工具都是针对单个图像工作的。如果你想批量压缩照片怎么办?Curtail 是一个能帮助你的应用。

有一大堆文件尺寸巨大的图片占用了太多的磁盘空间?或者你必须将图片上传到有文件大小限制的门户网站?

你可能有很多原因想要压缩图片。有大量的工具可以帮助你,我在这里说的不是命令行的工具。

你可以使用一个成熟的图像编辑器,如 GIMP。你也可以使用像 Squoosh 这样的网络工具,这是谷歌的一个开源项目。它甚至可以让你比较每个压缩级别的文件。

然而,所有这些工具都是针对单个图像工作的。如果你想批量压缩照片怎么办?Curtail 是一个能帮助你的应用。

Curtail: Linux 中用于图像压缩的灵巧工具

使用 Python 和 GTK3 构建的 Curtail 是一个简单的 GUI 应用,使用 OptiPNG、jpegoptim 等开源库来提供图像压缩功能。

它有一个 Flatpak 应用。请确保你的系统已启用 Flatpak 支持。

首先添加 Flathub 仓库:

然后使用下面的命令来安装 Curtail:

安装后,在你的 Linux 系统的菜单中寻找它,并从那里启动它。

界面朴素而简单。你可以选择你想要无损压缩还是有损压缩。

有损压缩会有质量差的图像,但尺寸较小。无损压缩会有更好的质量,但尺寸可能不会比原来的小很多。

你可以浏览图片,或者把它们拖到应用中。

是的,你可以用 Curtail 一键压缩多张图片。

事实上,你甚至不需要点击。只要你选择图片或拖放它们,它们就会被压缩,你会看到压缩过程的摘要。

正如你在上面的图片中看到的,我的一张图片的尺寸减少了 35%,另外两张图片的尺寸减少了 3% 和 8%。这是在无损压缩的情况下。

这些图片以 ​​-min​​ 为后缀(默认),保存在与原始图片相同的目录中。

虽然它看起来很简约,但有几个选项可以配置 Curtail。点击菜单,你会看到一些设置选项。

你可以选择是将压缩文件保存为新文件还是替换现有文件。如果你选择新文件(默认行为),你也可以为压缩后的图像提供一个不同的后缀。保留文件属性的选项也在这里。

在下一个选项卡中,你可以配置有损压缩的设置。默认情况下,压缩级别为 90%。

高级选项卡让你可以选择配置 PNG 和 WebP 文件的无损压缩级别。

总结

正如我前面所说,这不是一个突破性的工具。你可以用其他工具如 GIMP 做同样的事情。它只是使图像压缩的任务更简单,特别是对于批量图像压缩。

我很想看到在压缩时有​​转换图像文件格式​​的选项,就像我们在 Converseen 等工具中所拥有的那样。

总的来说,对于图像压缩的具体目的来说,这是一个不错的小工具。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CAS(Compare and Swap)队列是一种基于无锁的并发编程实现,其核心思想是利用原子操作的特性来实现线程安全的数据访问。下面是用Java实现一个简单的CAS队列的示例代码: ```java import java.util.concurrent.atomic.AtomicReference; public class CASQueue<T> { private AtomicReference<Node<T>> head; private AtomicReference<Node<T>> tail; public CASQueue() { Node<T> dummy = new Node<>(null); head = new AtomicReference<>(dummy); tail = new AtomicReference<>(dummy); } public void enqueue(T item) { Node<T> newNode = new Node<>(item); while (true) { Node<T> curTail = tail.get(); Node<T> tailNext = curTail.next.get(); if (curTail == tail.get()) { if (tailNext != null) { tail.compareAndSet(curTail, tailNext); } else { if (curTail.next.compareAndSet(null, newNode)) { tail.compareAndSet(curTail, newNode); return; } } } } } public T dequeue() { while (true) { Node<T> curHead = head.get(); Node<T> curTail = tail.get(); Node<T> headNext = curHead.next.get(); if (curHead == head.get()) { if (curHead == curTail) { if (headNext == null) { return null; } tail.compareAndSet(curTail, headNext); } else { T item = headNext.item; if (head.compareAndSet(curHead, headNext)) { return item; } } } } } private static class Node<T> { private T item; private AtomicReference<Node<T>> next; public Node(T item) { this.item = item; this.next = new AtomicReference<>(null); } } } ``` 这个队列的每个节点都包含一个元素和一个指向下一个节点的引用。队列的头部和尾部都是用AtomicReference来保证线程安全。enqueue方法,我们首先创建一个新的节点,然后利用CAS操作来将其添加到队列的尾部。如果队列的尾部发生了变化,我们需要再次尝试添加节点。dequeue方法,我们利用CAS操作来将队列的头部指针向前移动,并返回移除的元素。如果队列为空,则返回null。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值