[Linux] Skrypt do zmiany rozdzielczości grafiki
Jak to w życiu bywa, czasami trzeba się pobawić bardzo prostymi rzeczami, które w małej liczbie są przyjemne, zaś w dużej – stają się nudne. Tak jest z grafiką, którą w liczbie większej od 100 musimy zoptymalizować poprzez zmniejszenie rozdzielczości. Ale od czego jest Linux i shell…
Prosty skrypt, wykorzystujący bibliotekę ImageMagick (znaleziony na G), który wystarczy skonfigurować, podając katalog z grafiką, oraz maksymalną wysokość i szerokość grafiki, a następnie tylko czekać na efekty:
1 |
<br/>#!/bin/bash<br/><br/>if [ $# -le 0 ]; then<br/> echo "Użycie: resize_images.sh <ścieżka_do_katalogu>"<br/> exit 1<br/>fi<br/><br/>final_width=800<br/>final_height=800<br/>dir_name="$1"<br/><br/>echo "Modyfikuję pliki z katalogu $dir_name"<br/><br/>for file in "$dir_name"/*.[jJ][pP][gG]; do<br/> width=`identify -format %w "$file"`<br/> height=`identify -format %h "$file"`<br/> if [ $width -gt $height ]; then<br/> if [ $width -le $final_width ]; then<br/> echo "$file: size = $width"x"$height, rozmiary nie przekraczają maksimum! Zmiany nie dokonano"<br/> continue;<br/> fi<br/> new_height=`echo "$height*$final_width/$width" | bc`<br/> file_basename=`basename "$file"`<br/> file_dirname=`dirname "$file"`<br/> new_file_name=""$file_dirname"/scaled_$file_basename"<br/> <br/> # resize the image<br/> echo "$file: rozmiar = $width"x"$height, zmieniam na " "$final_width"x"$new_height"<br/> convert -resize "$finale_width"x"$new_height" "$file" "$new_file_name"<br/><br/> # replace the original file with the scaled file<br/> rm -f "$file"<br/> if [ $? -eq "0" ]; then<br/> mv "$new_file_name" "$file"<br/> fi<br/> else<br/> if [ $height -le $final_height ]; then<br/> echo "$file: rozmiar = $width"x"$height, rozmiary nie przekraczają maksimum! Zmiany nie dokonano"<br/> continue;<br/> fi<br/> new_width=`echo "$width*$final_height/$height" | bc`<br/> file_basename=`basename "$file"`<br/> file_dirname=`dirname "$file"`<br/> new_file_name=""$file_dirname"/scaled_$file_basename"<br/> <br/> # resize the image<br/> echo "$file: rozmiar = $width"x"$height, zmieniam na $new_width"x"$final_height" <br/> convert -resize "$new_width"x"$final_height" "$file" "$new_file_name"<br/><br/> # replace the original file with the scaled file<br/> rm -f "$file"<br/> if [ $? -eq "0" ]; then<br/> mv "$new_file_name" "$file"<br/> fi<br/> fi<br/>done<br/><br/>echo "Zrobione"<br/> |