LINUX.ORG.RU

[bash][костыли]можно ли это сделать красивее?

 ,


0

1
#!/bin/bash

n=$[`./count.sh` + 1]
for f in new/*.jp*g ; do 
	ow=`identify -format "%w" $f`
	oh=`identify -format "%h" $f`
	if [ "$ow" -gt "$oh" ]; then
		nw=150
		nh="`echo $nw / $ow '*' $oh | bc -l`"
		echo "from $ow oh $oh to $nw oh $nh"
	else
		nh=150  
                nw="`echo $nh / $oh '*' $ow | bc -l`"
		echo "from $ow oh $oh to $nw oh $nh"
	fi
	convert -resize "${nw}x${nh}" "$f" "avas/${n}.jpg"
	n=$[$n+1]
done

У меня есть подозрения, что это можно сделать намного проще.

Собственно, оно конвертирует картинки разных размеров пропорционально до 150 по большей стороне.

★★★★★

Последнее исправление: derlafff (всего исправлений: 1)

я бы порнуху вида nh=«`echo $nw / $ow '*' $oh | bc -l`» заменил на встроенную баш арифметику

x0r ★★★★★
()

$ for f in *.png; do
identify -format «%w %h» «$f» | read w h;
[ «$w» -gt «$h» ] && new=«150x$(bc -l <<< „150/$w*$h“ )» || new=$(bc -l <<< «150/$h*$w»)x150;
echo «from ${w}x${h} to ${new}»;
done

Только оно выдаёт фигню, как округлять - не помню.

123.41188524590163933926x150

AnDoR ★★★★★
()
Ответ на: комментарий от x0r

оно нули возвращает в силу того, что работает в целых числах

derlafff ★★★★★
() автор топика

convert cам умeeт дeлать пропорционально, т.e. эти высчитывания размepа не нужны.

Вродe -scale ключик, точно нe помню.

anonymous
()
Ответ на: комментарий от AnDoR

Округление до второго знака.
echo «scale=2; 5/3» | bc -l

Gordy
()
Ответ на: комментарий от anonymous

блин, а я мучался...

щас посмотрю

derlafff ★★★★★
() автор топика
Ответ на: комментарий от derlafff

и у тебя более жутко получилось :)

for f in *.png; do
  identify -format "%w %h" "$f" | read w h;
  if [ "$w" -gt "$h" ]; then
    new="150x$(bc -l <<< "150/$w*$h")";
  else
    new="$(bc -l <<< "150/$h*$w")x150";
  fi
 echo "from ${w}x${h} to ${new}";
 done

То же самое.

AnDoR ★★★★★
()
Ответ на: комментарий от AITap

может, ты имел в виду $[($nw * $oh / $ow)]?

Не подходит тем, что оно считает в целых числах, я уже об этом говорил

derlafff ★★★★★
() автор топика
Ответ на: комментарий от derlafff

То, что $nw / $ow * $oh

в целых числах не подходит (даёт нули) это понятно, но

$nw * $oh / $ow

должно давать нормальное число. Ну сделайте округление, разрядности для нормальный картинок должно хватать:

(10 * $nw * $oh / $ow + 5)/10

mky ★★★★★
()
Ответ на: комментарий от derlafff

Если сначала умножать, а потом делить, нули не получаются :)

Но правильнее было, действительно, использовать встроенные средства convert: -resize 150x150

AITap ★★★★★
()
Ответ на: комментарий от AITap

Да мне уже сказали, что можно просто convert -scale -resize 150

convert: -resize 150x150

так оно пропорции нарушит

derlafff ★★★★★
() автор топика
Ответ на: комментарий от AITap

Спасибо большое, одним велосипедом меньше

derlafff ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.