Barwienie obrazków i konwersja pdf na jpg
Do boju...! Popiszę sobie o zabawach z konwersjami pdf-ów i plików graficznych, oraz pakietem Image Magick. Wszystko to pod Ubuntu.
Miałem spore wątpliwości przy wybieraniu tematu do wpisu, którym rozdziewiczyłbym ten blog, gdyż wiedza moja jest szczątkowa i latka miną zanim się wyrobie odpowiednio. Ostatecznie jednak pomysł podsunęła mi siostra. Z bliżej nieznanego powodu (prawdopodobnie przez brak tuszu) zastrajkowała jej drukarka. Nie można było drukować barwy czarnej, pozostałe wciąż były dostępne - zatem tymczasowym rozwiązaniem problemu było zmiana czcionki drukowanych akurat szpargałów na zielony czy szary. Pojawił się jednak problem z wydrukiem pdf-u, którego czarna czcionka nie dała sobie nijak zmienić koloru. No i tu poszło pytanie do mnie, czy nie dałoby się jakoś tego pliku przemalować. Zapewne można się pobawić z odpowiednimi edytorami plików pdf, ale komu by się chciało szarpać z takimi cudami. Poza tym nie miałem szczególnie miłych doświadczeń z podobnymi programami - jakoś nie chciały rekonstruować złożonych dokumentów poprawnie (np. tabele łajdaczyły się zupełnie) I tu zrodził się pomysł ciekawy: może po prostu skonwertować cały ten pdf na garść plików jpg, te przemalować i zmontować jako pdf z powrotem? Do dzieła zatem.
Na początek samo przemalowywanie. Oczywiście automatyczne, najlepiej konsolowo żeby można było całość rzucić jako jakiś skrypt basha. I tutaj objawia się właśnie piękno i potęga pakietu Image Magick. Pakiet ten umożliwia przeróżne zabawy z grafiką, dodawanie ramek, obracanie, przycinanie, komponowanie no i oczywiście kolorowanie. Do tego celu posłużymy się narzędziem convert, służącym do modyfikowania grafik, np. zmieniania ich formatu:Spośród ogromnej liczby opcji, jaką dysponuje to narzędzie, kilka nadaje się do wyznaczonego na początku zadania. Zastosujemy najprostszą:

Oczywiście po lewej mamy oryginalną grafikę, zaś po prawej mamy jej czerwoną wersję.
Kilka słów na temat opcji -level-colors. Po pierwsze, każdy znający w przynajmniej elementarnym stopniu język angielski od razu zauważy, że jako argument podajemy nazwę koloru. Zamiast nazwy możemy podać wartość szesnastkową koloru (koniecznie w apostrofach!) poprzedzoną znakiem #, np. '#2343ff' lub też w formacie 'rgb(12, 32, 154)' gdzie przekazujemy wartości składowych dziesiętnie. Więcej informacji, wraz z listą nazw kolorów można znaleźć tutaj. Po drugie, należy pamiętać o przecinku po nazwie koloru - inaczej dostaniemy jednokolorowy prostokąt. Po trzecie, polecenie to działa w ten sposób wyłącznie dla obrazków w skali odcieni szarości. Efekt na obrazku kolorowym jest następujący:
Aby to poprawić należy dodać do narzędzia convert opcję -colorspace z parametrem gray, służącą do wyszarzania obrazka:
Poradziwszy sobie łatwo z kwestią kolorowania obrazków, przechodzimy do istoty rzeczy, czyli konwertowania pdf-ów.
Wspomniano poprzednio, że ważnym zastosowaniem narzędzia convert jest modyfikacja formatu plików. Czy zatem również dokumenty pdf poddadzą się jego działaniu? Otóż... tak. Po prostu wpisując pojedynczą komendę możemy przerobić wszystkie strony na grafiki:
Teraz pozostaje pytanie co zrobić aby dokonać konwersji na odwrót, tj. przerzucić otrzymane pliki jpg i zmontować z nich pojedynczy pdf. Najbardziej przydałby się w tym celu program pokroju ppmtopdf. Niestety, takiego programu... nie ma. Cóż, pozostaje zatem ponowne użycie narzędzia convert:
Otrzymaliśmy przemalowany pdf, lecz niestety, jego jakość znowu zostanie znacznie obniżona (tak przynajmniej się zdarzyło u mnie). Niestety, niewiele na to mogę poradzić - żadne opcje, żadne inne programy (jak np. tiff2pdf) nie poprawiają znacząco tej sytuacji. Przetrząsanie sieci nie na wiele się zdało. Z drugiej jednak strony, nie ma większych przeciwwskazań aby drukować obrazki zamiast pliku pdf.
W sumie pdf to taki nieco trefny format.
Miałem spore wątpliwości przy wybieraniu tematu do wpisu, którym rozdziewiczyłbym ten blog, gdyż wiedza moja jest szczątkowa i latka miną zanim się wyrobie odpowiednio. Ostatecznie jednak pomysł podsunęła mi siostra. Z bliżej nieznanego powodu (prawdopodobnie przez brak tuszu) zastrajkowała jej drukarka. Nie można było drukować barwy czarnej, pozostałe wciąż były dostępne - zatem tymczasowym rozwiązaniem problemu było zmiana czcionki drukowanych akurat szpargałów na zielony czy szary. Pojawił się jednak problem z wydrukiem pdf-u, którego czarna czcionka nie dała sobie nijak zmienić koloru. No i tu poszło pytanie do mnie, czy nie dałoby się jakoś tego pliku przemalować. Zapewne można się pobawić z odpowiednimi edytorami plików pdf, ale komu by się chciało szarpać z takimi cudami. Poza tym nie miałem szczególnie miłych doświadczeń z podobnymi programami - jakoś nie chciały rekonstruować złożonych dokumentów poprawnie (np. tabele łajdaczyły się zupełnie) I tu zrodził się pomysł ciekawy: może po prostu skonwertować cały ten pdf na garść plików jpg, te przemalować i zmontować jako pdf z powrotem? Do dzieła zatem.
Na początek samo przemalowywanie. Oczywiście automatyczne, najlepiej konsolowo żeby można było całość rzucić jako jakiś skrypt basha. I tutaj objawia się właśnie piękno i potęga pakietu Image Magick. Pakiet ten umożliwia przeróżne zabawy z grafiką, dodawanie ramek, obracanie, przycinanie, komponowanie no i oczywiście kolorowanie. Do tego celu posłużymy się narzędziem convert, służącym do modyfikowania grafik, np. zmieniania ich formatu:
convert nazwa_pliku.pdf nowy_plik.png
convert
nazwa_pliku +level-colors red, nowa_nazwa_pliku
Efekty prezentują się następująco:
Oczywiście po lewej mamy oryginalną grafikę, zaś po prawej mamy jej czerwoną wersję.
Kilka słów na temat opcji -level-colors. Po pierwsze, każdy znający w przynajmniej elementarnym stopniu język angielski od razu zauważy, że jako argument podajemy nazwę koloru. Zamiast nazwy możemy podać wartość szesnastkową koloru (koniecznie w apostrofach!) poprzedzoną znakiem #, np. '#2343ff' lub też w formacie 'rgb(12, 32, 154)' gdzie przekazujemy wartości składowych dziesiętnie. Więcej informacji, wraz z listą nazw kolorów można znaleźć tutaj. Po drugie, należy pamiętać o przecinku po nazwie koloru - inaczej dostaniemy jednokolorowy prostokąt. Po trzecie, polecenie to działa w ten sposób wyłącznie dla obrazków w skali odcieni szarości. Efekt na obrazku kolorowym jest następujący:
convert
nazwa_pliku +level-colors blue, nowa_nazwa_pliku

convert
nazwa_pliku -colorspace gray +level-colors blue, nowa_nazwa_pliku

Wspomniano poprzednio, że ważnym zastosowaniem narzędzia convert jest modyfikacja formatu plików. Czy zatem również dokumenty pdf poddadzą się jego działaniu? Otóż... tak. Po prostu wpisując pojedynczą komendę możemy przerobić wszystkie strony na grafiki:
convert nazwa_pliku.pdf nowa_nazwa.jpgNiestety, otrzymane w ten sposób pliki graficznie są dość niskiej jakości, co widać szczególnie wyraźnie po ich pokolorowaniu. Smutna prawda jest taka, że narzędzia spod znaku Image Magick mają pewne problemy z niekonwencjonalnymi formatami danych takimi jak pdf lub pliki post script i nie potrafią przerabiać ich prawidłowo. Być może jakiś związek ma również wersja pakietu (przeglądając znalezione w internecie zasoby odniosłem wręcz wrażenie, że nowsze wersje są pod tym względem gorsze) Zatem do konwersji zabierzemy się w nieco inny sposób. Zastosujemy inny format pliku - ppm. Więcej szczegółów na temat tego formatu można znaleźć u cioci wikipedii. Konwersję wykonamy przy pomocy narzędzia pdftoppm:
pdftoppm nazwa_pliku.pdf nowa_nazwaOtrzymane w ten sposób pliki ppm można by skonwertować do jpg, ale nie ma to większego sensu, ponieważ pakiet Image Magick z łatwością działa na plikach ppm. Możemy więc teraz przemalować wszystkie otrzymane pliki na nasz wymarzony kolor.
Teraz pozostaje pytanie co zrobić aby dokonać konwersji na odwrót, tj. przerzucić otrzymane pliki jpg i zmontować z nich pojedynczy pdf. Najbardziej przydałby się w tym celu program pokroju ppmtopdf. Niestety, takiego programu... nie ma. Cóż, pozostaje zatem ponowne użycie narzędzia convert:
convert *.jpg -adjoin nowa_nazwa.pdfOpcja -adjoin pomaga sklejać strony. Jej brak może spowodować błąd "Segmentation fault".
Otrzymaliśmy przemalowany pdf, lecz niestety, jego jakość znowu zostanie znacznie obniżona (tak przynajmniej się zdarzyło u mnie). Niestety, niewiele na to mogę poradzić - żadne opcje, żadne inne programy (jak np. tiff2pdf) nie poprawiają znacząco tej sytuacji. Przetrząsanie sieci nie na wiele się zdało. Z drugiej jednak strony, nie ma większych przeciwwskazań aby drukować obrazki zamiast pliku pdf.
W sumie pdf to taki nieco trefny format.
Etykiety: Linux
Komentarze (0):
Prześlij komentarz
Subskrybuj Komentarze do posta [Atom]
<< Strona główna