使用GNU/Linux的图像格式计算器和转换器

使用GNU/Linux的图像格式计算器和转换器,linux,image,image-processing,batch-processing,command-line-interface,Linux,Image,Image Processing,Batch Processing,Command Line Interface,如果有一个用于GNU/Linux的命令可以执行以下操作,那不是很好吗 Open-Recursive*.png-导出到时不区分大小写-jpg@100%质量=小于原始png的字节,然后写入jpg并删除png 它还可以执行与该命令相反的操作: 如果png=小于jpg的字节,则删除jpg 寻找一个真正的命令是没有帮助的:如果它存在,它只会对你和(大概)一小部分人有用,而这些人正是你未来的需要 UNIX的方法是将多个命令链接在一起以执行您想要的操作。例如: “openrecursive”:使用“find”

如果有一个用于GNU/Linux的命令可以执行以下操作,那不是很好吗

Open-Recursive*.png-导出到时不区分大小写-jpg@100%质量=小于原始png的字节,然后写入jpg并删除png

它还可以执行与该命令相反的操作:

如果png=小于jpg的字节,则删除jpg


寻找一个真正的命令是没有帮助的:如果它存在,它只会对你和(大概)一小部分人有用,而这些人正是你未来的需要

UNIX的方法是将多个命令链接在一起以执行您想要的操作。例如:

“openrecursive”:使用“find”将文件送入料斗,例如find/path-type f-name'*.png'-print,然后通过管道将列表发送出去

“不区分大小写”:增加find(-o)的范围,或者让find转储所有文件,然后使用grep查找所需内容,例如find-打印| grep-i'.png'

“if exported to jpg”:这有点棘手,因为我认为检查转换是否保存字节的唯一方法是实际转换并查看。您可以使用ImageMagick包中的转换工具来执行此操作。ImageMagick多年来一直是大牌发行版的标准,因此应该很容易找到

“如果小于字节”:在shell或您最喜欢的脚本语言(Perl、python等)中可以直接执行


最终的结果是,你可以从这些较小的片段中构建你想要的东西,你现在应该能够做你想要做的事情,并且你可以在将来修改一些东西,或者与其他人分享他们独特的需求。这就是UNIX的方式。Ommmm:)

不久前,我写了一个脚本来转换我的照片。如果任何宽度或高度大于最大值(默认值为1024),脚本将减少当前文件夹中所有JPG文件的尺寸,保持纵横比,并将它们放在不同的文件夹(已创建)中。我希望这对你有帮助

#!/bin/bash

if [ ! -d reduced ]
then
    mkdir reduced
fi

if [ $# -lt 1 ]
then
    MAX=1024
else
    MAX=$1
fi

for obj in *.jpg
do
    echo "------> File: $obj"
    tam=$(expr `identify -format "%b" "$obj" | tr -d "B"` / 1024)
    width=$(identify -format "%w" "$obj")
    height=$(identify -format "%h" "$obj")
    echo -e "\tDimensions: $width x $height px"
    echo -e "\tFile size: $tam kB"
    if [ $width -gt $height ] && [ $width -gt $MAX ]
    then
        convert "$obj" -resize $MAX "reduced/$obj.jpg"
        cd reduced
        mv "$obj".jpg "${obj%.jpg}".jpg;
        tam=$(expr `identify -format "%b" "$obj" | tr -d "B"` / 1024)
        width=$(identify -format "%w" "$obj")
        height=$(identify -format "%h" "$obj")
        echo -e "\tNew dimensions: $width x $height px"
        echo -e "\tNew file size: $tam kB"
        cd ..
        echo -e "\tOk!"
    elif [ $height -gt $MAX ]
    then
        convert "$obj" -resize x$MAX "reduced/$obj.jpg"
        cd reduced
        mv "$obj".jpg "${obj%.jpg}".jpg;
        tam=$(expr `identify -format "%b" "$obj" | tr -d "B"` / 1024)
        width=$(identify -format "%w" "$obj")
        height=$(identify -format "%h" "$obj")
        echo -e "\tNew dimensions: $width x $height px"
        echo -e "\tNew file size: $tam kB"
        cd ..
        echo -e "\tOk!"
    else
        cp "$obj" reduced/
        echo -e "\tDo not modify!"
    fi  
done

呃,在回答你的问题时——“不,可能不会”

首先,
PNG
文件可以支持透明,而
JPEG
s不能,因此,如果按照您的规范编写脚本,您可能会损失无数个小时的工作,为数千幅图像创建透明遮罩

其次,
PNG
文件不支持EXIF/IPTC数据,因此您也将失去所有版权、相机和镜头设置、GPS数据、日期和大量其他元数据

第三,您的
PNG
文件每个通道可能包含16位,而
JPEG
每个通道只能存储8位,因此从
PNG
移动到
JPEG
可能会丢失大量精细的颜色分级

第四,您可能会失去与较早的Web浏览器的兼容性,这些浏览器对
PNG
s的支持参差不齐