Композитный сайт imagemagick пропорционален размеру изображения

Я хочу разместить год на картинке с помощью imagemagick. У меня около 4000 фотографий. Я пытаюсь сделать это с помощью imagemagick, используя параметр -compose.

Размер логотипа 200x67 пикселей.

логотип

Но все картинки не одного размера. Как я могу добавить пропорциональный размер года на каждое изображение?

Пример изображения

пример изображения

Я еще не пробовал imagemagick, но я поместил логотип на две разные картинки с помощью фотошопа. Или imagemagick справляется с этим? Или я могу поместить текст на каждое изображение с определенным размером шрифта? Или лучше преобразовать все изображения в один размер? Если это так, может ли imagemagick сказать мне, какая картинка самая маленькая?


person Guntis    schedule 16.01.2013    source источник
comment
Я сделал скрипт pastebin.com/ZDeZagmD, и на моем экране он выглядит хорошо. Пробую и на другом ноутбуке.   -  person Guntis    schedule 16.01.2013


Ответы (2)


Я предлагаю вам сделать следующее:

Создайте логотип большего размера, чтобы потом можно было его уменьшить.

Затем прокрутите все изображения:

  1. Получить размер изображения изображения:

    $size_array = getimagesize ( $image_src );

    $ ширина = $ size_array [0];

    $ высота = $ размер_массива [1];

  2. В зависимости от размера изображения уменьшить копию логотипа

  3. Наложить логотип на изображение

person Lukas Nagel    schedule 16.01.2013

Я сделал скрипт http://pastebin.com/HdBMx2Zm. Он хорошо выглядит на моем компьютере с 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 "."
person Guntis    schedule 17.01.2013