Jak zamienić wiele plików w formacie MS Powerpoint na dokumenty PDF
przy pomocy programu OpenOffice ale z poziomu wiersza poleceń
opisał Bob DuCharme w tekście
Moving to OpenOffice:
Batch Converting Legacy Documents. W skrócie postępuje się
następująco: w OO należy przejść do okna dialogowego
Narzędzia->Makra->Zarządzaj Makrami. Następnie
utworzyć moduł, np. MyConversion
i wpisać do okienka następującą treść :
' BASIC, see: http://www.xml.com/pub/a/2006/01/11/from-microsoft-to-openoffice.html ' Based on code from http://www.oooforum.org/forum/viewtopic.phtml?t=3772 ' Save document as an Acrobat PDF file. Sub SaveAsPDF( cFile ) cURL = ConvertToURL( cFile ) ' Open the document. Just blindly assume that the document ' is of a type that OOo will correctly recognize and open ' without specifying an import filter. oDoc = StarDesktop.loadComponentFromURL( cURL, "_blank", 0, _ Array(MakePropertyValue( "Hidden", True ),)) cFile = Left( cFile, Len( cFile ) - 4 ) + ".pdf" cURL = ConvertToURL( cFile ) ' Save the document using a filter. oDoc.storeToURL( cURL, Array(_ MakePropertyValue( "FilterName", "writer_pdf_Export" ),) oDoc.close( True ) End Sub ' Save document as a Microsoft Word file. Sub SaveAsDoc( cFile ) ' mostly a copy of SaveAsPDF cURL = ConvertToURL( cFile ) oDoc = StarDesktop.loadComponentFromURL( cURL, "_blank", 0, (_ Array(MakePropertyValue( "Hidden", True ),)) cFile = Left( cFile, Len( cFile ) - 4 ) + ".doc" cURL = ConvertToURL( cFile ) oDoc.storeToURL( cURL, Array(_ MakePropertyValue( "FilterName", "MS WinWord 6.0" ),) oDoc.close( True ) End Sub ' Save document as an OpenOffice 2 file. Sub SaveAsOOO( cFile ) ' mostly a copy of SaveAsPDF. Save as an OpenOffice file. cURL = ConvertToURL( cFile ) oDoc = StarDesktop.loadComponentFromURL( cURL, "_blank", 0, _ Array(MakePropertyValue( "Hidden", True ),)) ' Set output file extension based on lower-case ' version of input extension. Select Case LCase(Right(cFile,3)) Case "ppt" ' PowerPoint file. cFileExt = "odp" Case "doc" ' Word file. cFileExt = "odt" Case "xls" ' Excel file. cFileExt = "ods" Case Else cFileExt = "xxx" End Select cFile = Left( cFile, Len( cFile ) - 3 ) + cFileExt cURL = ConvertToURL( cFile ) oDoc.storeAsURL( cURL, Array() ) oDoc.close( True ) End Sub Function MakePropertyValue( Optional cName As String, Optional uValue ) _ As com.sun.star.beans.PropertyValue Dim oPropertyValue As New com.sun.star.beans.PropertyValue If Not IsMissing( cName ) Then oPropertyValue.Name = cName EndIf If Not IsMissing( uValue ) Then oPropertyValue.Value = uValue EndIf MakePropertyValue() = oPropertyValue End Function
Uruchamia się to następująco (Linux):
ooffice -invisible "macro:///Standard.MyConversion.SaveAsPDF($PWD/plik.ppt)"
albo via prosty jednoargumentowy skrypt oo2pdf
:
#!/bin/bash # Konwersja do formatu PDF echo "Konwertuję $1..." ooffice -invisible "macro:///Standard.MyConversion.SaveAsPDF($PWD/$1)"
Koniecznie trzeba podać pełną ścieżkę
do pliku (stąd zmienna PWD
) bo inaczej zgłoszony zostanie błąd.
W MS Windows też trzeba podać pełną nazwę, co nie do końca może być
wygodne. Ale to już nie moje zmartwienie. Makra działają nie tylko
dla plików .ppt
,
ale też .doc
i .odt/odp
.
Na ww. stronie jest też podana następująca zgrabna pętla zamieniająca wszystkie pliki (w tym przypadku .ppt) w katalogu bieżącym i jego podkatalogach:
for i in $(find ./ -name "*.ppt"); do oo2pdf $i ; done
Być może to find ./ -name
jest nawet przesadne i wystarczy
zwykłe for i in *.ppt; do
.
Jak połączyć wiele plików PDF w jeden? Okazuje się, że tego typu montaż jest możliwy przy wykorzystaniu program epdftex, który jest standardowym składnikiem każdej nowej dystrybucji TeXa i poniższego skryptu (autor P. Pianowski):
\nopagenumbers \def\picdir {pic/} \hoffset -1in \voffset -1in \topskip 0pt \newdimen\HS \HS=210mm \newdimen\VS \VS=297mm \hsize\HS \vsize\VS \pdfpagewidth=\HS \pdfpageheight=\VS %\def\letter {letter} \def\aiv {a4} \def\stronapdf #1#2#3#4{\pdfximage page #1 {\picdir #2} \vbox to\VS{\vskip #4 \hbox to\HS{\hskip #3% \pdfrefximage\pdflastximage \hss}\vss} } \newcount\odstrony \newcount\dostrony \newcount\nstr \newcount\lstr \def\strony#1#2#3#4#5{% \odstrony #1 \dostrony #2 \def\przesunieciex {#3} \def\przesunieciey {#4} \lstr \numexpr \dostrony-\odstrony+1 \relax \nstr 1 \loop \stronapdf \nstr{#5}\przesunieciex\przesunieciey \vfil\break \ifnum\nstr<\lstr \advance\nstr 1 \repeat } %% --- tu zmieniać: --- \strony {01}{12}{5mm}{5mm}{plik_0.pdf} \strony {13}{18}{5mm}{5mm}{plik_1.pdf} ... itd ... \bye
Oczywiście koniec pliku należy zmodyfikować, wywołując polecenie
\strony
tyle razy ile trzeba. Powyższe wypróbowałem
i działa doskonale. Trzeci i czwarty argument
polecenia \strony
określa przesunięcie i umożliwia
dopasowanie marginesów na stronie (dla każdego pliku oddzielnie).
Inne proponowane do tego celu rozwiązania to: latex plus pakiet pdfpages, pdftk (ORA wydało nawet książkę PDF Hacks--nie wiedziałem) albo ghostscript uruchomiony w następujący sposób:
gs -q -sPAPERSIZE=A4 -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \ -sOutputFile=out.pdf in1.pdf in2.pdf...
Więcej informacji na temat łączenia plików PDF można znaleźć w tekście: How to concatenate PDFs without pain.
W nawiązaniu do tekstu nt.
Emacsa,
kol. Wanted
podpowiedział, że
oprócz Bitstream Vera, który faktycznie nie ma
za dużo diakrytyków, jest klon tego fontu z dużą
liczbą znaków pn.
DejaVu
(DejaVu fonts).
Spróbowałem to zainstalować wpisując yum install dejavu-fonts
,
ale się nie udało:
Error: dejavu-fonts conflicts with fontconfig >= 2.3.0
Hmm, dziwne.
Żeby czegoś nie popsuć wolałem działać ostrożnie. Rozpakowałem
archiwum .rpm
:
rpm2cpio dejavu-fonts-2.18-1.rf.noarch.rpm | cpio -idv
W środku nie było nic nazwyczajnego. Pliki ttf + dokumentacja.
Pliki .ttf umieściłem ręcznie w /usr/share/fonts/dejavu/
.
Na wszelki wypadek uruchomiłem w tym katalogu mkfontdir
i mkfontscale
. Uruchomiłem Emacsa w następujący sposób:
/usr/local/emacs23/bin/emacs-23.0.0 --font "DejaVuSansMono-14" --multibyte
Wygląda, że działa. Przy okazji i zupełnie przypadkowo wygooglałem informację nt. projektu fontów STIX. Z tego co wyczytałem ma to być podobna do Times New Roman rodzina bogatych w diakrytyki fontów. Na dniach mają być gotowe i upublicznione. Zobaczymy, być może będzie to coś ciekawego.
Pomiędzy Sopotem a Gdynią ,,od zawsze'' znajdował się tor do wyścigów motocrosowych. Akurat ten sport mnie specjalnie nie pasjonuje, łaziłem tam jednak od czasu do czasu. Obok toru jest taki zapomniany teren: jakieś budy, w których ewidentnie ciągle ktoś mieszka, zniszczone ogródki działkowe i inne budowle. Trochę to dziwne miejsce, bo kilometr-dwa obok (czyli w Sopocie) metr kwadratowy mieszkania kosztuje majątek a tutaj taka dzicz i żadnego zainteresowania zaprowadzeniem cywilizacji. BTW z zeszłym roku pełno tu było ucha bzowego. Taki nietypowy grzybek, jadalny, ale mało kto go je (przynajmniej w Polsce). Nietypowy ze względu na kształt i czas, w którym można go zbierać (zima). Aha, tak dla porównania chiński grzyb mun aka cloud ear fungus vel auricularia polytricha, gdyby ktoś uważał ucho za coś obrzydliwego.
No więc dziś się okazało, że na motocrossie jest centrum różnych dziwnych sportów. Na stronach Urządu Miasta w Gdyni: znalazłem więcej informacji na ten temat: W czwartek, 2 sierpnia w Kolibkach (na terenach dawnego motocrossu) ruszył największy park przygody w Polsce... No to Misiek przeoczył takie wydarzenie! Ale byliśmy w Zakopanem więc jest usprawiedliwiony.
Na terenie ,,bud i działek'' jest też (nowa) wieża widokowa. Przypadkowo na nią wlazłem w zeszłym roku jak była w budowie. Teraz jest już gotowa i można z niej oglądać Trójmiasto plus Hel na horyzoncie (zdjęcia, regulamin). Z dziećmi albo jak z gośćmi z Polski nie ma co robić, to można się wybrać --powinno się spodobać. Najprościej się tu dostać idąc od strony Gdyni ulicą Spółdzielczą (początek w okolicach przystanku PKP Gdynia-Orłowo). Alternatywnie, od strony Sopotu z ulicy Bernadowskiej należy skręcić w lewo, w leśną drogę, naprzeciw pierwszego budynku po prawej stronie tej ulicy, idąc od strony torów PKP (tę drogę widać na google maps).
Do sukcesów odchodzącego rządu oprócz spadku bezrobocia i przestępczości oraz likwidacji specsłużb dodam możliwość (wreszcie) oglądania w TV pucharu świata w najbardziej zespołowej z gier zespołowych czyli Rugby. Do tej pory był z tym kłopot, a ja jestem wielkim (platonicznym) fanem tej gry. Piłka nożna no nie wytrzymuje porównania.
Ale w tym roku i od tej edycji wreszcie przełom. RWC 2007 ma być pokazywany w Polsacie. W fazie grupowej, która kończy się 30 września interesująco zapowiadają się mecze: w grupie A -- Anglii, RPA i Samoa (9, 14, 22); w grupie B -- Walii i Australii (15); w grupie C -- Nowej Zelandii, Szkocji i Włoch (8, 23, 29) oraz w grupie D -- Francji, Irlandii i Argentyny (7, 21, 30).
Jak większość jeżdżących na rowerze pilnie notuję przejechane kilometry i inne przydatne dane. Robię to w sposób dość elementarny:
<day date="2007/08/25"> <ride dist="60" exdist="60.00" bike="b"> <by name='Banino' /> <by name='Miszewo' /> <by name='Przodkowo'/> <by name='Czeczewo'/> <by name='Warzno'/> <by name='Kielno' /> </ride> </day>
Jak widać jest to plik w formacie XML; co oznaczają poszczególne elementy i atrybuty można IMHO się zorientować po ich nazwach. Odpowiednie skrypty XSLT formatują dane, liczą średnie miesięczne i roczną. Całość jest dostępna tutaj. Ponieważ system jest w miarę toporny, dziś zrobiłem rozpoznanie co w tym zakresie oferują inni i znalazłem dwa potencjalnie interesujące serwisy: bikestats oraz bikebrother.
Pierwszy z wymienionych jest prostszy: pozwala na oznakowanie wyjazdów za pomocą daty, czasu, przejechanych kilometrów oraz krótkiego opisu. Bikebrother ma dużo bardziej rozbudowany opis. Więcej można przesłać ślad GPSa trasy. Pliki GPS mogą pobrać inni użytkownicy.
Oba serwisy prezentują dane w efektowny sposób i to jest ich jedyny plus. Minusów jest więcej: dodawanie danych za pomocą formularzy to przeżytek:-) Jakiś REST-based API byłoby dużo bardziej wygodniejsze. Wpisywanie wszystkich danych do formularza Bikebrothera musi być męczące. Nie ma (albo jest bardzo starannie ukryte) eksportu danych, więc i tak trzeba robić kopie.
Reasumując na razie minusy zdecydowanie przewyższają nad plusami. No i na koniec: licencje. Oczywiście na ten temat nic nie ma, pliki zawierające ślady GPS są udostępnione ,,na kocią łapę'' (albo nie na kocią: są własnością autorów). Może jestem przewrażliwiony ale nie lubię w ten sposób dzielić się danymi. Tzn. lubię dzielić się ale na określonych zasadach, np Creative Commons. Za granicą też zresztą kombinują zamiast korzystać ze sprawdzonych rozwiązań.
Poniżej przykładowe ekrany wpisywania danych (pierwszy z Bikestat, drugi z BB; jak się kliknie to będą większe):
Jakiś czas temu
Elka
uaktualniła fragment swojej
książki
nt. akordeonów.
Ma on być wydany w postaci artykułu w wydawnictwie prestiżowej Akademii
Muzycznej. Oczywiście podesłanie tego w formacie .tex
nie wchodziło w grę. Dokument nie jest specjalnie skomplikowany, ale
zwiera kilkadziesiąt przypisów, kilkanaście rysunków i setki poleceń
służących do tworzenia skorowidzów.
W oryginale był to dokument plain TeXa,
tyle, że łatwo (na szczęście) go było zamienić na dokument LaTeXowy:
%& --translate-file=il2-pl \documentclass{article} \usepackage{polski} \usepackage{graphicx} \newcommand\PICDIR{} % \renewcommand\index[1]{} %% eat \newcommand\xindex[1]{} % \newcommand\AWindex[2][NIL]{} % \newcommand\Piece[2][NIL]{\emph{#2}} % eat \renewcommand{\includegraphics}[2][NIL]{% \begin{center}\texttt{#2.eps}\end{center}} \renewcommand\dywiz{-} \setcounter{secnumdepth}{-1} \title{Polska literatura akordeonowa...
Polecenia indeksujące \index
, \xindex
,
\AWindex
oraz \Piece
zostały przedefiniowane:
zjadają swoje argumenty i nie wstawiają nic do składu. Przedefiniowałem
też \includegraphics
, bo plik .rtf
ze wstawionymi
rysunkami miał ponad 40 Mb. Skoro ostateczny skład ma być w InDesign,
to rysunki można wysłać osobno i w lepszym formacie.
BTW: konstrukcja \newcommand\polecenie[2][NIL]
przedefiniowuje polecenie, które ma dwa argumenty, w tym
jeden (pierwszy) jest opcjonalny,
tzn. użycie takiego polecenia ma postać: \qq[pierwszy]{drugi}
albo \qq{drugi}
.
Napis NIL
,
to domyślna wartość, tego (opcjonalnego) argumentu.
Kiedy mam potrzebę zamiany pliku LaTeXa na MS Word używam latex2rtf. Nie jest to program idealny, ale lepszego nie znam:
latex2rtf -i polish -C latin2 akordeony.ltx
Przełącznik -i polish
powinien wstawiać generowane
napisy w języku polskim (tj, Rysunek zamiast Figure
itp.).
Kłopot, bo tego nie robi (wersja 1.9.16a, beta).
Próbowałem na różne sposoby a rzecz wydaje się banalna, jednak
uparcie wstawiane są teksty angielskie (można to ew. poprawić edytując
plik RTF, np. Perlem).
Za to przełącznik -C
, ustawiający stronę kodową, działa.
Po uruchomieniu latex2rtf, pojawiło się kilka ostrzeżeń:
akordeony.ltx:3 Unknown style option polski ignored akordeony.ltx:4 Unknown style option graphicx ignored akordeony.ltx:9 No existing definition for \index akordeony.ltx:13 No existing definition for \includegraphics akordeony.ltx:14 No existing definition for \dywiz
Ale konwersja została dokonana (prawie) prawidłowo.
W szczególności
latex2rtf prawidłowo zinterpretował moje redefinicje i pominął
zwartość poleceń indeksujących a zamiast plików graficznych wstawił
ich nazwy.
Jedyny błąd jaki zauważyłem, to wstawianie zbędnego
odstępu pomiędzy \footnote
a następującym po numerze
przypisu znakiem przestankowym, tj. numer-odstęp-kropka, zamiast
numer-kropka.
Przy okazji konwersji z LaTeXa do MSW: dia potrafi wyeksportować dobrej jakości diagramy w formacie EMF.
Kierując się wskazówkami ze strony
www.emacswiki.org
skompilowałem Emacsa 23, wersja alfa. Ten Emacs umie wreszcie korzystać
z dobrej jakości fontów TrueType dzięki wsparciu Xft
. Zatem:
cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/emacs co -r emacs-unicode-2 emacs ./configure --with-gtk --enable-font-backend --with-xft --prefix=/usr/local/emacs23 make mkdir /usr/local/emacs23 chown tomek:tomek /usr/local/emacs23
Na wszelki wypadek dociągnąłem jeszcze yum install giflib-devel
, bo
./configure
zgłosił błąd (po co mi gify?). Oczywiście nie chcę
zmieniać starego emacsa na wersję alfa, stąd pomysł zainstalowania
wszystkiego w katalogu /usr/local/emacs23
. Będę miał dwa The one true editor
-- prawdziwie skumulowana potęga.
Teraz uruchamiam:
emacs --font "Bitstream Vera Sans Mono-10"
Krój Vera fajnie wygląda, ale polskich ogonków nie ma, i nawet nie jest to wina Emacsa tylko po prostu nie ma ich w foncie (Bitstream Vera Fonts).
Spróbowałem zatem z innym ustawieniem, i po dłuższym kombinowaniu czemu zamiast polskich znaków widzę coś zupełnie innego udało się:
## emacs-23 zdaje sie działać: /usr/local/emacs23/bin/emacs-23.0.0 --font "Monospace-13" --multibyte
Na etapie rozruchu dodałem jeszcze --debug-init
, dzięki
czemu szybko ustaliłem co się gryzie ze starego .emacs
i innych plików startowych z nowym Emacsem. Nie było tego dużo:
hscroll-global-mode
, pakiety session
,
tramp
i jde
. Zamiast session
w dystrybucji
Emacsa jest desktop.el
; tramp.el
też jest już w dystrybucji --
konflikt dotyczył starej wersji. Dodałem zatem kilka warunków w stylu:
(if (< emacs-major-version 22) (progn (require 'session) (add-hook 'after-init-hook 'session-initialize)) (progn (desktop-save-mode 1) ;; Customization follows below (setq history-length 250) (add-to-list 'desktop-globals-to-save 'file-name-history)) )
Emacs faktycznie używa fontu TrueType. Można to sprawdzić, np. za pomocą sposobu podanego w CSE HUJI Emacs Fonts HOWTO:
(frame-parameter nil 'font)
Wpisujemy powyższe do dowolnego bufora, ustawiamy kursor za zamykającym nawiasem
a następnie C-x C-e
. W minibuforze pojawi się:
"-b&h-luxi mono-medium-r-normal--15-*-*-*-*-*-fontset-startup"
Wygląda zatem, że to luxi mono Charlesa Bigelowa i Krisa Holmesa.
Jakość (czytelność) tekstu jest faktycznie znacząco lepsza, ale z wyświetlaniem poszczególnych znaków (na pierwszy rzut oka) jest różnie: niektóre znaczki jakby trochę są krzywe:-). Może to kwestia fontu? Sprawa wymaga dalszego zbadania. Poniżej dwa przykładowe ekrany (jak się kliknie to będą większe):
Okazało się, że w sobotę (28 lipca) mój Garmin Geko 301 nie tylko przestawił magicznie
częstotliwość zapisu śladu, ale także cofnął się w czasie. W rezultacie kilka wpisów ,,zachodzi''
chronologicznie na siebie. Wyszło to dzisiaj, gdy usiłując wyciąć
kawałek śladu przy pomocy programu gpsbabel
uruchomionego
w następujący sposób (por.
Data Filters):
gpsbabel -t -i gpx -f plik-we.gpx -x track,start=2007081907,stop=2007081915 -o gpx -F plik-wy.gpx
otrzymałem:
trackfilter-init: Track points badly ordered (timestamp)!
Nie wiem czemu tak się stało. Mniejsza z tym. Zamiast ręcznie poprawiać błędne
wpisy można spróbować dodać opcję merge
,
która łączy wszystkie ślady w jeden usuwając
,,części wspólne'' (jeżeli ślady nie zachodzą na siebie można zamiast merge
,
użyć pack
)
gpsbabel -t -i gpx -f plik-we.gpx -x track,merge,start=2007081907,stop=2007081915 \ -o gpx -F plik-wy.gpx
Powyższe wytnie ślad utworzony od siódmej do piętnastej, 19 sierpnia 2007 r. BTW: do ściągnięcia zawartości Geko na dysk użyłem następującego skryptu:
#!/bin/bash # http://wiki.openstreetmap.org/index.php/How_to_get_data_from_a_Geko_201 filename="`date +%y%m%d-%H%M`" echo "creating $filename-waypoints.gpx" gpsbabel -i garmin -f /dev/ttyS0 -o gpx -F $filename-waypoints.gpx sleep 2 echo "creating $filename-tracklog.gpx" gpsbabel -t -i garmin -f /dev/ttyS0 -o gpx -F $filename-tracklog.gpx
Do tej pory używałem okienkowego programu gpsman
;
gpsbabel
jest wygodniejszy bo nie trzeba klikać, tyle że
gpsman
potrafi wyświetlić ślad, co czasami się może
przydać, więc nie skreślam go ostatecznie.
Pro memoria spisałem swoje męki związane z zainstalowaniem
i skonfigurowaniem skryptu blosxom
. Głównie myślałem
o sobie, ale może komuś też się przyda. Tekst jest
tutaj.
W tym tekście opiszę w jaki sposób wysyłam swoje zdjęcia na
Wikimedia Commons stosując
lekko podrasowany skrypt
Erika Möllera
(wersja oryginalna).
Po pierwsze należy zarejestrować się na Wikimedia Commons
(w sposób opisany na podanej wyżej
stronie).
Potem zmodyfikować skrypt, nadając odpowiednie wartości zmiennym
$username
oraz
$password
, znajdującym się na początku skryptu.
Teraz należy skopiować wszystkie obrazki
do katalogu i uruchamiać skrypt (,,z poziomu'' katalogu nadrzędnego)
w następujący sposób:
perl upld2wc.pl katalog
W wyniku działania skryptu powstanie zaślepkowy plik files.txt, który wygląda jakoś tak:
>plik1.jpg {{Information |Description= [[:pl:Sopot|Sopot]], Poland |Source=own work |Date=2007 |Author=Tomasz Przechlewski |Permission={{cc-by-2.5}} }} >plik2.jpg {{Information |Description= [[:pl:Sopot|Sopot]], Poland |Source=own work |Date=2007 |Author=Tomasz Przechlewski |Permission={{cc-by-2.5}} }} ...
Teraz trzeba dodać/zmodyfikować opis do każdego rysunku (wiersz
Description
); następnie należy uruchomić skrypt powtórnie:
perl upld2wc.pl katalog
Jakoś nie mogę się przekonać do używania Unicode (nie mam też
specjalnie do tego motywacji -- jeden bajt cały czas mi wystarcza), dlatego
skrypt ,,oczekuje'', że plik files.txt
jest kodowany
w wariancie iso-8859-2, natomiast to co jest
wysyłane na Wikimedia Commons jest w Unikodzie.
Zdjęcia zrobione w trybie pionowym trzeba oczywiście obrócić.
Do tego celu używam programu jpegtran, ale taki sposób żeby
zostały zachowane metadane
EXIF.
Do modyfikowania metadanych EXIF używam programu exiv2
:
# kompletny skrypt jest tutaj exiv2 ex plik-we.jpg # zapisuje EXIF w pliku plik-we.exv jpegtran -rotate 90 plik-we.jpg > plik-wy.jpg # obrót mv plik-we.exv plik-wy.exv # zmiana nazwy exiv2 -in plik-wy.jpg # wstawia EXIF do obróconego pliku
W podręczniku programu exiv2 błędnie podane jest exiv2 -it
zamiast exiv2 -in
.
Uwaga: podanie exiv2 -pt
powoduje wyświetlenie wszystkich
metadanych.
Zamiast jpegtran można spróbować skorzystać z programu exiftran,
który potrafi obrócić obrazek z zachowaniem metadanych.
Program exiftran znajduje się w archiwum fbida
(przynajmniej
w dystrybucji FC5).
Wreszcie nie zawadzi dodać informacje dotyczące autora/licencji do
samego pliku ze zdjęcie modyfikując odpowiednie pola EXIF,
w tym przypadku Exif.Image.Artist
oraz Exif.Image.Copyright
:
# kompletny skrypt jest tutaj exiv2 -M"set Exif.Image.Copyright Licence: CC Attribution" \ -M"set Exif.Image.Artist Creator: Tomasz Przechlewski" plik
BTW: do manipulowania metadanymi EXIF w skryptach Perla służy świetny
pakiet Image::ExifTool
. (Por. Mój
sposób na dodawanie zdjęć na flickr.com).
Dopisane 21 lutego 2008:
Exiv2 jest do kitu, a co najmniej niepotrzebny. Zdjęcie można
obrócić dużo prościej. Zamiast mnożyć byty w postaci skryptów
basha, My_jpeg_rot
(BTW znak minus w nazwach jest
niepoprawny w bashu) jest funkcją, którą
należy umieścić w ~/.bash_profile
:
# Obrót pliku .jpg z zachowaniem metadanych EXIF # wykorzystanie: My_jpeg_rot [-l -r -u] plik function My_jpeg_rot () { ROT="90" while test $# -gt 0; do case "$1" in -l) ROT="90" ;; -r) ROT="270" ;; -u) ROT="180" ;; *) FILE="$1" ;; esac shift done if [ "$FILE" = "" ] ; then echo " *** Podaj nazwę pliku ***" else f=`basename $FILE .jpg` jpegtran -rotate 90 -copy all -outfile "${f}_r".jpg "$f".jpg # clear rotation/orientation so that some viewers (e.g. Eye # of GNOME) won't be fooled jhead -norot "${f}_r".jpg fi unset FILE ROT f }
Zobacz też HOWTO: Rotate JPG images in GNOME's Nautilus File Manager.
Podobnie skrypt dodający informacje dotyczące autora/licencji
zmieniłem na program w Perlu wykorzystujący doskonały moduł
Image::ExifTool
zamiast exiv2:
#!/usr/bin/perl -w # Wykorzystnie: $0 [-l licencja ][-c autor] plik1 plik2 ... use strict; use Image::ExifTool; use Getopt::Long; my $credentials = "Creator: Tomasz Przechlewski"; my $license_stmt = "Licence: CC Attribution"; my $help = 0; GetOptions( 'help' => \$help, 'credentials=s' => \$credentials, 'license=s' => \$license_stmt,); if ($help) { print "$0 [-l cpr_notice][-c creator] file1 file2 ...\n"; exit 0 ;} my $eT = new Image::ExifTool; while( my $photo = shift @ARGV ) { $eT->ExtractInfo($photo); #add_more_exif($exifTool); $eT->SetNewValue(Artist => "$credentials"); $eT->SetNewValue(Copyright => "$license_stmt"); # rewrite Photo to update Exif: $eT->WriteInfo($photo); print "Done: $photo $credentials $license_stmt\n"; } ## -- end --