Nie mogę się zalogować w programie picasa (wersja dla linuksa, 3.0 beta). Wpisując Picasa Linux signup problem do Google znalazłem podpowiedź:
cp /usr/lib/wine/wininet.dll.so /opt/google/picasa/3.0/wine/lib/wine/
U mnie przynajmniej powyższe działa.
Się przy okazji okazało, że zdjęcia zawierające współrzędne geograficzne przesłane via formularz nie są traktowane jako geotagowane . Picasaweb rozpoznaje zdjęcia jako geotagowane jeżeli są ładowane programem picasa. Na flickr.com jest pod tym względem prościej, bo współrzędne geograficzne są pobierane ze zdjęcia po stronie serwera--wystarczy przesłać plik i nie jest istotne w jaki sposób...
Jest problem z opisami EXIF niektórych zdjęć robionych szerokokątnym
obiektywem Olympus Zuiko Digital 11--22 f/2.8-3.5. Niektórymi żeby było śmieszniej
-- widocznie zależy to od nastaw. Otóż
jeżeli synchronizuję zdjęcia ze śladem GPS za pomocą
gpsPhoto.pl
, to pojawia się komunikat:
error: [minor] Bad MakerNotes directory
Komunikat generuje jakaś procedura z pakietu
Image::ExifTool
,
wykorzystywana przez gpsPhoto.pl
.
Po aktualizacji exiftool do 8.06 o tyle się sytuacja zmieniła, że
komunikat jest inny:
error: [minor] Bad EquipmentIFD directory.
Gdybym korzystał ze skryptu exiftool
, to błąd można zignorować
dodając opcję -m
przy uruchamianiu skryptu.
Ale ja używam gpsPhoto.pl
,
które z kolei korzysta z perlowego pakietu Image::ExifTool
. Żeby nie
modyfikować gpsPhoto.pl
(beznadziejna na oko sprawa),
poprawiam wpisy EXIF poniższym programem w Ruby.
Słowo poprawiam oznacza
dokładnie tyle, że poprawne wpisy są przepisane a błędne zignorowane.
Otrzymane w rezultacie opisy EXIF są niekompletne. Opcja -m
działa
dokładnie identycznie.
#! /usr/bin/ruby # fix_tags.rb by Sijmen Mulder <sjmulder@gmail.com> in 2008. Public domain. files = Dir.glob("*.JPG").concat Dir.glob("*.jpg") files.each do |file| commands = [ "cp #{file} #{file}_original", "exiftool -overwrite_original -q -exif:all= \"#{file}\"", "exiftool -overwrite_original -q -q -tagsfromfile \"#{file}_original\" --MakerNotes \"#{file}\" " ] puts(file) commands.each do |c| #puts(c) system(c) end end puts "Processed #{files.length} file(s)."
Powyższy skrypt kopiuje każdy plik .jpg
z bieżącego katalogu,
a następnie wstawia do kopii wyłącznie poprawne wpisy EXIF z pliku oryginalnego.
Program jest w Ruby bo znaleziono go w sieci. Można by przerobić w innym języku ale mi się nie chce
Cała procedura jest taka sobie,
bo poprawione pliki .jpg
zawierają niekompletne
opisy EXIF, ale póki co nic lepszego nie wymyśliłem.
Przełączyłem aparat na format RAW a do zamiany plików w tym formacie
(rozszerzenie .orf
) na tiff użyłem dcraw
, np.:
dcraw -T plik.orf # zamiana poj. pliku for i in *.orf; do dcraw -T $i ; done
Pliki są nieskompresowane, więc następnie:
convert plik.tiff -compress ZIP plik_z.tiff # albo mogrify -compress ZIP plik.tiff
Program mogrify
modyfikuje plik oryginalny
Zamiana tiffa na jpeg z wykorzystaniem convert
wygląda zaś następująco:
for i in *.tiff; do convert $i `basename $i .tiff`.jpg ; done
Powyższe ma jeden dyskwalifikujący brak: dcraw
usuwa
dane EXIF. Szukając rozwiązania znalazłem dwa skrypty basha do
konwersji z zachowaniem metadanych:
Converting RAW images to JPEG with Exif on Fedora
oraz wrapper
script for dcraw. Pierwszy ze skryptów używa exiv2
a ja mam awersję do tego programu (być może niesłuszną, ale
kiedyś mi podpadł). Drugi niby jest dla Nikona,
ale żeby działał z Olympusem to wystarczy zmienić nef
na orf
w jednym wierszu (oprócz tego
uprościłem skrypt, bo był sophisticated zbytnio i niepotrzebnie):
#!/bin/bash # http://www.howtofixcomputers.com/forums/digital-photo/my-humble-contribution-wrapper-script-dcraw-linux-4360.html # Zamiana plików ORF (Olympus) na JPEG z zachowaniem danych EXIF # Wykorzystuje dcraw, cjpeg (do kompresji) oraz exiftool # DCRAW="dcraw -w -c " while [ $# -ge 1 ] do JPEG=`basename $1 .orf`.jpg echo "Converting $1 => ${JPEG}..." $DCRAW $1 | cjpeg -quality 90 > $JPEG || echo " *** Problem writing " # transfer EXIF data from the original raw file exiftool -overwrite_original -TagsFromFile "$1" "$JPEG" >/dev/null shift done
Przy okazji znalazłem link do konferencji Libre Graphics Meeting.
Dopisane 27 kwietnia 2008: zmieniłem ustawienia w aparacie
na zapis RAW+HQ. Poprzednio było RAW, a przedtem HQ. HQ zapisuje
prawie że identyczne ,,objętościowo'' pliki .jpg
o wielkości 2Mb (z ogonkiem).
Nie ustaliłem jeszcze czemu ale pliki
konwertowane z RAW różnią się znacząco wielkością (ten sam parametr
quality
oczywiście)
a te produkowane przez aparat są takie same.
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 --