Skalowanie wielu obrazków w OSX czyli kłopot z GUI
Posted on Sun 06 March 2016 in Hacks (wannabe), Macbook, Multimedia, Tips 4 Mac OSX • 3 min read
Chyba każdej osobie zajmującej się grafiką lub stronami web prędzej niż później przydarzy się sytuacja w której trzeba przeskalować wiele obrazków.
Radzę z tym sobie pod Linuksem używając skryptu w Bashu i pakietu ImageMagick, w OSX, od kiedy go mam, również używam Basha i programu systemowego o nazwie: sips.
Skrypt jest prymitywny bo używam go ręcznie, a wygląda tak:
#!/bin/sh # Użyj tego skryptu tak: # for i in ./*.JPG ; do ~/bin/zmniejsz_obrazki.sh $i ; done HSIZE=1024 # docelowa szerokość VSIZE=1024 # docelowa wysokość GETWIDTH=`sips --getProperty pixelWidth "$1" | cut -s -d : -f 2 -` GETHEIGHT=`sips --getProperty pixelHeight "$1" | cut -s -d : -f 2 -` echo "WIDTH = $GETWIDTH" echo "HEIGHT = $GETHEIGHT" # jeśli poziomy to if [ $GETWIDTH -gt $GETHEIGHT ] ; then echo "Zmieniam POZIOMY $1..." sips --resampleWidth $HSIZE "$1" 2>&1>/dev/null else echo "Zmieniam PIONOWY $1..." sips --resampleWidth $VSIZE "$1" 2>&1>/dev/null fi
Ktoś znajomy zapytał jak ja to robię, opisałem to co powyżej ale okazało się, że to zbyt zaawansowane. Chciałem się ciut pogimnastykować i szybko przerobić mój skrypt na coś z GUI. "Coś" co zapyta o docelową szerokość i/lub wysokość i zrobi co trzeba dla wszystkich wybranych w Finderze obrazków.
W OSX jest funkcjonalość zwana "Folder Actions". Pod jakiś folder podpina się skrypt, który jest uruchamiany gdy w owym folderze nastąpi jakaś zmiana, czyli np. zostaną doń skopiowane pliki. Idealna sprawa na moje potrzeby. Mógłbym zrobić taki skrypt, pokazać komuś jak podpiąć go pod folder, a skrypt zapyta o szerokość docelową i na jej podstawie przeskaluje obrazki. I jeszcze w dodatku zmodyfikuje kopie obrazków, pozostawiając nietknięte oryginały.
Skrypty do "Folder Actions" pisze się w AppleScript - to IMHO najwstrętniejszy język programowania, już wolałbym Perla bez komentarzy. Ale dałem radę, zrobiłem skrypt na podstawie Apple'owskich wskazówek. Działał pięknie w wersji testowej, gdzie wielkość docelowa była na twardo zdefiniowana w skrypcie. Gdy tylko dodałem prompt oczekujący na interakcję z użytkownikiem, wszystko zdechło! Skrypty typu "Folder Actions" nie obsługują interakcji. Koniec i kropka.
No to może z innej mańki? Zrobię w XCode własną akcję do Automatora. Automator to potężne ale proste w użyciu narzędzie, o którym nie wiedzą lub boją się wiedzieć przeciętni użytkownicy Maca. W dobrze skrojonym GUI można sobie wyklikać sporo tzw. Workflow czyli po naszemu przepływów pracy. Ale stworzenie interaktywnego skalowania jest poza jego zasięgiem bez stworzenia specjalnej akcji, np. w Bashu.
Coż pozostaje? Napisanie natywnej aplikacji w ObjectiveC za pomocą XCode nie wchodzi w rachubę, bo to ma być mininarzędzie nad którym nie będę spędzał czasu. To może Python? Jest wbudowany w OSX, na moim "cofniętym" Macu w wersji 2.7.
Poszukałem GUI pod Pythona i nastapiło zaraz rozczarowanie jak i radosna satysfakcja. Rozczarowanie bo okazało się, że najpopualrniesze GUI czyli Kivy, PyGUI, wxPython mają problemy z wersjami "Pytonga". To jest rzeźnia i nie chcę nawet zaczynać z takim garbem na plecach. I wtedy nadeszła uciecha w postaci TkIntera. Radosna satysfakcja bierze się stąd, że narzędzia stare, starsze niż ja, okazują się być bardziej przydatne od wylaszczonych nowalijek.
https://www.youtube.com/watch?v=RJB1Ek2Ko_Y
TkInter to nakładka na stare, dobre Tcl/Tk. I tu kończy się moja pogawędka bo znalazłem czego potrzebowałem. Robię GUI, a że TkInter działa i pod Linuksem i w Windzie, to tylko mnie cieszy i podkręca!
Jak skończę to wrzucę.