图像格式计算器和转换器与GNU / Linux

时间:2014-10-10 02:21:50

标签: linux image image-processing batch-processing command-line-interface

如果有一个GNU / Linux命令可以执行以下操作,那会不会很好:

  

Open -Recursive * .png -Not-Case-Sensitive如果导出到jpg @ 100%质量=比原始png少的字节然后写jpg并删除png

它也可以执行该命令的反转:

  

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

3 个答案:

答案 0 :(得分:1)

寻找One True Command并不会有所帮助:如果它存在,它只会对你和(可能)未来确切需要你的小组人有用。

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

" open-recursive":使用" find"将文件导入漏斗,例如find / path -type f -name' *。png' -print然后通过管道发送列表。

"不区分大小写":要么增加find(-o)的范围,要么让find转储所有文件,然后使用grep查找你想要的东西,例如find。 -print | grep -i' .png'

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

"如果字节数少于":在shell或您喜欢的脚本语言中直接做 - Perl,python等。

网络是你从这些较小的部分中建立你想要的东西,你应该能够做你想要的东西,并拥有一些你可以在未来修改或与他人分享的独特需求。这就是UNIX方式。嗯嗯:)

答案 1 :(得分:0)

前段时间,我写了一个脚本来转换我的照片。如果任何宽度或高度大于MAX(默认值= 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

答案 2 :(得分:0)

呃,回答你的问题 - “不,可能不会”。

首先,PNG文件可以支持透明度而JPEG不能,所以如果这是根据您的规范编写的,那么您可能会失去无数小时的工作,为数千张图像创建透明蒙版。

其次,PNG文件不支持EXIF / IPTC数据,因此您也会丢失所有版权,相机和镜头设置,GPS数据,日期以及其他元数据的大小。

第三,您的PNG文件每个通道可能包含16位,而JPEG每个通道只能存储8位,因此从{{1}移动可能会丢失大量精细的色彩渐变转到PNG

第四,您可能会失去与旧版Web浏览器的兼容性,这些浏览器对JPEG提供了支持。