imagemagick与图像大小的比例

imagemagick与图像大小的比例,imagemagick,imagemagick-convert,Imagemagick,Imagemagick Convert,我想用imagemagick在图片上标出年份。我有大约4000张照片。我尝试使用-compose参数使用imagemagick来实现这一点 标志是200x67像素 但并非所有的图片大小都相同。如何在每张图像上按比例添加年份大小 示例图像 我还没有尝试imagemagick,但我用photoshop将徽标放在了两张不同的图片上。 或者imagemagick处理这个?或者我可以在每个图像上按定义的字体大小放置文本?或者最好将所有图像转换为一个大小?如果是这样,imagemagick能告诉我哪张是

我想用imagemagick在图片上标出年份。我有大约4000张照片。我尝试使用-compose参数使用imagemagick来实现这一点

标志是200x67像素

但并非所有的图片大小都相同。如何在每张图像上按比例添加年份大小

示例图像

我还没有尝试imagemagick,但我用photoshop将徽标放在了两张不同的图片上。
或者imagemagick处理这个?或者我可以在每个图像上按定义的字体大小放置文本?或者最好将所有图像转换为一个大小?如果是这样,imagemagick能告诉我哪张是最小的图片吗?

我建议您执行以下操作:

创建更大尺寸的徽标,以便以后可以缩小它

然后循环浏览所有图像:

  • 获取图像的图像大小:

    $size\u array=getimagesize($image\u src)

    $width=$size_数组[0]

    $height=$size_数组[1]

  • 根据图像大小,向下缩放徽标副本

  • 在图像上合成徽标

  • 我使脚本在我的XP机器(ACDSee)和windows 7(windows集成图像查看器)上看起来都很好。在一些图片中,年份稍微大胆一点,但没关系

    #!/bin/bash
    #
    # 
    # 
    # find /media/sf_test/meklee/ -type f -iname "*.jpg" -exec /root/imagick_script.sh "{}" \;
    #
    # depends on jhead and imagemagick
    # if call find from another file, then is possible to count all pictures, place count on file and in imagick_script.sh
    # decrase that amount by 1. 
    # 
    # in script some directory names is in Latvian :)
    #
    
    backgroundimage=$1
    bgp=/media/sf_test/
    
    
    if [ -f "${bgp}stop" ]
    then
        echo -ne "*"
        exit 0
    fi
    
    if [ ! -d "${bgp}2019" ]
    then
        mkdir -p "${bgp}2019"
    fi
    
    # "%[fx:w] %[fx:h] %[exif:DateTime]" (use this if images has no exif data)
    #dim=`identify -format "%[fx:.15*w] %[fx:.15*h] %[exif:orientation] %[exif:DateTime]" "$backgroundimage"`
    
    # be careful with auto-orient
    # see this: http://www.imagemagick.org/script/command-line-options.php?#auto-orient
    #orient=`echo $dim | awk '{print $3}'`
    #if [ "$orient" != "1" ]
    #then
    #orient image (rewrite original)
    #    convert -auto-orient "$1" "$1"
    #re-read image data
    #    dim=`identify -format "%[fx:.15*w] %[fx:.15*h] %[exif:orientation] %[exif:DateTime]" "$backgroundimage"`
    #fi
    
    
    # jhead is much faster...
    
    
    #ww=`echo $dim | awk '{print $1}'`
    #hh=`echo $dim | awk '{print $2}'`
    #ww=`printf "%.0f\n" "${ww}"`
    #hh=`printf "%.0f\n" "${hh}"`
    ww=`jhead "$1" | grep 'Resolution' | awk '{print $3}'`
    hh=`jhead "$1" | grep 'Resolution' | awk '{print $5}'`
    ww=`echo "$ww * .15" | bc -l  | xargs printf "%1.0f"`
    hh=`echo "$hh * .15" | bc -l  | xargs printf "%1.0f"`
    
    
    if [ "$hh" -gt "$ww" ]
    then
        let ww=$ww*2
    fi
    
    #year=`echo $dim | awk '{print substr($4,1,4)}'`
    # works only if exif is avaiable..
    year=`jhead "$1" | grep 'File date' | awk '{print substr($4,1,4)}'`
    
    # i have images takin in range from 2004 to 2012, so if some exim data is removed, use year 2019..
    case "$year" in
    '2004')
        #
    ;;
    '2005')
        #
    ;;
    '2006')
        #
    ;;
    '2007')
        #
    ;;
    '2008')
        #
    ;;
    '2009')
        #
    ;;
    '2010')
        #
    ;;
    '2011')
        #
    ;;
    '2012')
        #
    ;;
    *)
        year=2019
        mv "$1" "${bgp}2019"
        echo -ne "!"
        exit 0
    ;;
    esac
    
    
    
    if [ ! -f ${bgp}${year}.png ];
    then
        convert -gravity southeast -size 300x130 xc:transparent -font Courier-bold -pointsize 125 -fill red -draw "text 0,0 '${year}'" ${bgp}output.png
        composite  ${bgp}output.png ${bgp}fons.png ${bgp}${year}.png
        #echo "${year}.png not found, create one ..";
    fi
    
    Watermark=${bgp}${year}.png
    
    
    Fname="${backgroundimage##*/}"
    Fdir="${backgroundimage:0:${#backgroundimage} - ${#Fname}}"
    #echo "${Fdir}new_$Fname"
    #echo "${ww}x$hh $1"
    if [ ! -d "/media/sf_test/resize/$year/" ] 
    then
        mkdir "/media/sf_test/resize/$year/"
    fi
    
    if [ ! -d "/media/sf_test/apstradatie/$year/" ]
    then
        mkdir "/media/sf_test/apstradatie/$year/"
    fi
    
    if [ ! -f "/media/sf_test/resize/$year/$Fname" ]
    then
        composite -gravity southeast \( $Watermark -resize ${ww}x${hh} \) "$backgroundimage" "/media/sf_test/resize/$year/$Fname"
    fi
    mv "$1" "/media/sf_test/apstradatie/$year"
    #"${Fdir}neew_$Fname"
    
    echo -ne "."
    
    我做了一些脚本,在我的屏幕上看起来不错。我也在另一台笔记本电脑上试过。