Skrypt do łączenia wielu zdjęć w jedno (Galeria Grid)
Pierwszy wpis z serii gotowy skrypt do automatyzacji konkretnej czynności. Ten, pomaga generować “miniatury”, łącząc obrazy wielu przedmiotów na jednym “płótnie” (tak będę nazywał obszar obrazu naszej galerii). Pomocne dla osób, które chcą umieścić na aukcji, karcie produktu, zdjęcie poglądowe wszystkich wariantów (np. wielu kolorów, wzorów).
Plan działania
Skrypty są idealne do realizowania określonych zadań, a więc musimy określić co konkretnie potrzebujemy zautomatyzować.
Zadania:
Zebranie informacji o wszystkich obrazkach (ilość i wymiary)
Ustalenie optymalnych wymiarów miniatury na płótnie, uwzględniając
Ilość wszystkich obrazków
Ilość obrazków w jednej linii
Szerokość płótna
Modyfikacja obrazka i wklejenie go na płótno
Dla każdego obrazka
Zapis wyniku do pliku (w tym przypadku PNG)
Skrypt
Ważne! Każdy skrypt piszę w najnowszej wersji Python (3.5 i wyżej).
Potrzebować będziemy następujące biblioteki:
Ad. 1
Funkcja zbiera informacje o plikach w podanym folderze. Buduje “słownik” (dict) który użyjemy aby zachować informacje o ilości plików oraz ich wymiarach.
Przykład co zwraca funkcja:
Ad. 2
Korzystając z informacji z punktu 1, możemy wyliczyć średnie (optymalne) wymiary dla obszaru jednego obrazka na płótnie. Najlepiej kiedy obrazki nie odbiegają znacząco wymiarami od siebie (przykład kłopotliwego zestawu: 64x64, 1200x3000, 800x12000).
Pozostałe potrzebne dane wczytamy “po drodze”
Ad. 3
Czas na główną funkcję, która zrobi robotę.
Funkcja pomocnicza, do wczytywania obrazków:
Danie główne:
Dobra, time out, spróbuję trochę wyjaśnić co się dzieje na górze.
W tym miejscu sprawdzamy czy ilość obrazków jest większa niż maksymalna ilość dla jednego rzędu. Jeżeli nie, nie uwzględnimy np. 5 miejsc w rzędzie, ale tyle ile realnie mamy obrazków.
Wyposażeni w niezbędne dane, tworzymy obszar galerii, czyli nasze przysłowiowe płótno.
I konkretna robota, czyli otwieramy kolejne obrazki, zmniejszamy do wielkości obliczonej wcześniej, jeżeli jest to zdjęcie które nie zmieści się już w obecnym rzędzie przenosimy je na następny (pod spodem), wstawiając przy tym pomiędzy każdy obszar wolne miejsce, które zadeklarowaliśmy w zmiennej space_between.
Ad. 4
Nie zapominamy o zapisie i zamknięciu pliku
To by było na tyle, cały skrypt z dodatną obsługą parametrów (co by odpalać z konsoli) dostępna na moim GitHub.
"Im mniej nużącej pracy manualnej tym lepiej, zwłaszcza kiedy musimy sami prowadzić sklep internetowy". Autor bloga cwsi.pl o tematyce automatyzacji w dziedzinie e-commerce. Entuzjasta języków skryptowych (szczególnie Python).