<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-9113514280353109536</id><updated>2010-11-28T12:31:26.786-08:00</updated><title type='text'>Photoshop Workout PL</title><subtitle type='html'>Technicznie o Photoshopie. Porady, jakich nie znajdziesz nigdzie indziej.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://photoshopworkout-pl.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9113514280353109536/posts/default'/><link rel='alternate' type='text/html' href='http://photoshopworkout-pl.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>SzopeN</name><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>2</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9113514280353109536.post-9143958131580653076</id><published>2010-11-28T12:24:00.000-08:00</published><updated>2010-11-28T12:24:18.422-08:00</updated><title type='text'>Synchronizacja Bridge⇔Lightroom</title><content type='html'>&lt;style type="text/css"&gt;.m { font-family: Courier New, Courier, monospace;}&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;Kolega namówił mnie na zakup Lightrooma, twierdząc że jest to świetne narzędzie do katalogowania i przeglądania zdjęć. Zaufałem i kupiłem. Jestem w trakcie oswajania się z interfejsem.&lt;br /&gt;&lt;br /&gt;Pierwszy problem, który napotkałem ma związek ze współdzieleniem metadanych z ocenami między Bridgem (BR) i Lightroomem (LR). Gwiazdki przenoszą się bez problemu. Kolory też, po wybraniu w menu LR &lt;span class="m"&gt;Metadata&lt;/span&gt;▸&lt;span class="m"&gt;Color Label Set&lt;/span&gt;▸&lt;span class="m"&gt;Bridge Default&lt;/span&gt;. Jeśli zmieniliśmy jakieś matadane w Bridge po zaimportowaniu obrazków do LR, wystarczy zaznaczyć wszystkie obrazki i wybrać &lt;span class="m"&gt;Metadata▸Read Metadata from File&lt;/span&gt;. AFAIK nie ma możliwości automatycznego (= bez klikania czegokolwiek) uaktualnienia danych w LR, jeśli zmienił się plik XMP. Po wykonaniu powyższych kroków, synchronizację Bridge▸Lightroom mamy prawie zrobioną.&lt;br /&gt;&lt;br /&gt;Aby ustawianie przenosiły się z Lightroom do Bridge, wystarczy w dialogu &lt;span class="m"&gt;Edit&lt;/span&gt;▸&lt;span class="m"&gt;Catalog Settings...&lt;/span&gt; [Ctrl]+[Alt]+[,], w zakładce &lt;span class="m"&gt;Metadata&lt;/span&gt; zaznaczyć opcję &lt;span class="m"&gt;Automatically write changes into XMP&lt;/span&gt;. Od tej chwili, każda zmiana metadanych zostanie od razu zapisana w pliku XMP. Tę zmianę Bridge wychwytuje natychmiast bez problemu (trzeba przełączyć się na okno Bridga; czasami konieczne jest też odświeżenie [F5]).&lt;br /&gt;&lt;br /&gt;Pozostał tylko jeden problem -- synchronizacja zdjęć oznaczonych jako 'Rejected'. Bridge przypisuje do takich zdjęć ocenę -1 (xap:rating) w pliku XMP. Lightroom wcale nie umieszcza informacji o fladze "rejected" w tym pliku. Flagi trzymane są jedynie w bazie danych LR.&lt;br /&gt;&lt;br /&gt;Najprostszym rozwiązaniem jest rezygnacja ze stosowania oceny (w Bridge) lub flagi (w lightroom) "Rejected" na rzecz oznaczeń kolorami. Można też każdorazowo przeprowadzać ręczną synchronizację opisaną poniżej. (BR→LR) Zdjęcia które zostały już oznaczone jako odrzucone, można jednym kliknięciem odfiltrować, zaznaczyć wszystkie i zmienić kolor (np. na fioletowy; Label&gt;To Do). Teraz zostaje tylko odświeżenia metadanych w LR (&lt;span class="m"&gt;Metadata▸Read Metadata from File&lt;/span&gt;). Dodatkowo można teraz oflagować zdjęcia jako Rejected i usunąć kolor (UWAGA - patrz niżej). Synchronizację LR→BR przeprowadzamy analogicznie. W przypadku braku wolnego koloru, można posłużyć się słowem kluczowym, np. 'rejected'.&lt;br /&gt;&lt;br /&gt;Zważywszy na fakt, iż synchronizacja musi być wykonywana ręcznie, dość łatwo doprowadzić do niespójności w oznaczeniach plików odrzuconych w LR i BR. Trzeba też uważać na sytuację, gdy wcześniej odrzucony plik "przywracamy do życia", tj. zmieniamy jego stan z "rejected" na inny. W LR ocena zdjęcia jest niezależna od flag, można zatem odrzucony plik ocenić np. na 3 gwiazdki (zakładamy, że wcześniej nie był wcale oceniany). Spowoduje to w BR ustawienie oceny na 3, a co za tym idzie usunięcie oznaczenia "rejected". Jeśli w BR zmienimy ocenę 'rejected' na 0..5 gwiazdek, analogiczna zmiana w ocenie nastąpi w LR. Jednak flaga odrzucenia pozostanie ustawiona. Ten przypadek łatwo wykryć, jeśli przyjmiemy zasadę, iż wszystkie odrzucone w LR pliki powinny posiadać ocenę 0 gwiazdek.&lt;br /&gt;&lt;br /&gt;Biorąc pod uwagę powyższe spostrzeżenia, najbezpieczniej jest zrezygnować ze stanu 'rejected' na rzecz koloru, mając nadzieję, że przy następnym uaktualnieniu Adobe wymyśli sposób na rozwiązanie problemu synchronizacji odrzuconych zdjęć.&lt;br /&gt;&lt;br /&gt;Jest jeszcze drugie potencjalne rozwiązanie. Baza danych LR zapisywana jest w formacie SQL Light 3 (rozszerzenie lrcat), można zatem, bazując na ocenie zapisanej w pliku XMP, zmodyfikować flagi odrzucenia bezpośrednio w bazie i &lt;em&gt;vice versa&lt;/em&gt;. Problem w tym, że LR (dokładniej: SQL Lite) nie zmienia pliku bazy danych zaraz po zmianie oceny (ani w bliskiej przyszłości). Nie udało mi się zmusić LR do zapisania pliku z bazą danych "na żądanie". Zmiany można zatem wprowadzać/odczytywać, tylko wtedy, gdy LR nie jest uruchomiony.&lt;br /&gt;&lt;br /&gt;Można napisać narzędzie, które przeskanuje bazę danych LR i odpowiednie pliki XMP (informacje o ich lokalizacji są w bazie). Na podstawie zebranych danych zsynchronizuje obie lokacje. Decyzję w którą stronę synchronizować można podjąć bazując np. na czasie ostatniej modyfikacji.&lt;br /&gt;&lt;br /&gt;Jeszcze lepiej by było, gdyby dało się odczytywać i zapisywać dane z bazy podczas działania LR. Mam klika pomysłów na osiągnięcie tego :) Bazę eksplorowałem za pomocą programu &lt;a href="http://www.yunqa.de/delphi/doku.php/products/sqlitespy/index"&gt;SQLiteSpy&lt;/a&gt;, który może mieć ograniczone możliwości w kwestii blokad i współdzielenia bazy. Możliwe, że da się osiągnąć to, o czym pisałem wyżej za pomocą API albo wstrzyknąć wątek do procesu LR i użyć SQLite Shared-Cache Mode. Możliwe, że trzeba będzie trochę pogrzebać w części kodu odpowiedzialnej za łączenie się z bazą.&lt;br /&gt;&lt;br /&gt;Życie było by o wiele piękniejsze, gdyby wszystkie programy były Open Source (przynajmniej w części UI i logiki). Z drugiej strony -- nie było by wtedy zabawy przy Reverse Engineeringu ;)&lt;br /&gt;&lt;br /&gt;Na koniec zapytanie SQL pokazujące jak można wyciągnąć z bazy LR flagę (0 - brak flagi, 1 - oflagowane (flagged), -1 - odrzucone (rejected)) dla pliku o danej nazwie:&lt;br /&gt;&lt;div id="code" name="code"&gt;&lt;pre style="background-color:#ffc;border:1px solid #cc9; overflow: auto"&gt;&lt;span style="color:#993333;font-weight:bold;" title="sql/sql/keyword/reserved"&gt;SELECT&lt;/span&gt;&lt;span style="color:#000000;" title="sql/sql"&gt; ai.pick &lt;br /&gt;&lt;/span&gt;&lt;span style="color:#993333;font-weight:bold;" title="sql/sql/keyword/reserved"&gt;FROM&lt;/span&gt;&lt;span style="color:#000000;" title="sql/sql"&gt;&lt;br /&gt;   Adobe_images ai&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#993333;font-weight:bold;" title="sql/sql/keyword/reserved"&gt;JOIN&lt;/span&gt;&lt;span style="color:#000000;" title="sql/sql"&gt; AgLibraryFile alfi &lt;/span&gt;&lt;span style="color:#993333;font-weight:bold;" title="sql/sql/keyword/reserved"&gt;ON&lt;/span&gt; &lt;span style="color:#008800;" title="sql/sql/symbol"&gt;(&lt;/span&gt;&lt;span style="color:#000000;" title="sql/sql"&gt;ai&lt;/span&gt;&lt;span style="color:#008800;" title="sql/sql/symbol"&gt;.&lt;/span&gt;&lt;span style="color:#000000;" title="sql/sql"&gt;rootfile&lt;/span&gt;&lt;span style="color:#008800;" title="sql/sql/operator"&gt;=&lt;/span&gt;&lt;span style="color:#000000;" title="sql/sql"&gt;alfi&lt;/span&gt;&lt;span style="color:#008800;" title="sql/sql/symbol"&gt;.&lt;/span&gt;&lt;span style="color:#000000;" title="sql/sql"&gt;id_local&lt;/span&gt;&lt;span style="color:#008800;" title="sql/sql/symbol"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#993333;font-weight:bold;" title="sql/sql/keyword/reserved"&gt;WHERE&lt;/span&gt;&lt;span style="color:#000000;" title="sql/sql"&gt;&lt;br /&gt;   alfi&lt;/span&gt;&lt;span style="color:#008800;" title="sql/sql/symbol"&gt;.&lt;/span&gt;&lt;span style="color:#000000;" title="sql/sql"&gt;baseName &lt;/span&gt;&lt;span style="color:#008800;" title="sql/sql/operator"&gt;=&lt;/span&gt; &lt;span style="color:#ff0000;" title="sql/sql/string/start"&gt;'&lt;/span&gt;&lt;span style="color:#ff0000;" title="sql/sql/string"&gt;NazwaPlikuBezRozszerzenia&lt;/span&gt;&lt;span style="color:#ff0000;" title="sql/sql/string/end"&gt;'&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:#993333;font-weight:bold;" title="sql/sql/keyword/reserved"&gt;AND&lt;/span&gt;&lt;span style="color:#000000;" title="sql/sql"&gt; alfi&lt;/span&gt;&lt;span style="color:#008800;" title="sql/sql/symbol"&gt;.&lt;/span&gt;&lt;span style="color:#000000;" title="sql/sql"&gt;folder&lt;/span&gt;&lt;span style="color:#008800;" title="sql/sql/operator"&gt;=&lt;/span&gt;&lt;span style="color:#008800;" title="sql/sql/symbol"&gt;(&lt;/span&gt;&lt;br /&gt;                &lt;span style="color:#993333;font-weight:bold;" title="sql/sql/keyword/reserved"&gt;SELECT&lt;/span&gt;&lt;span style="color:#000000;" title="sql/sql"&gt; alfo&lt;/span&gt;&lt;span style="color:#008800;" title="sql/sql/symbol"&gt;.&lt;/span&gt;&lt;span style="color:#000000;" title="sql/sql"&gt;id_local&lt;br /&gt;                &lt;/span&gt;&lt;span style="color:#993333;font-weight:bold;" title="sql/sql/keyword/reserved"&gt;FROM&lt;/span&gt;&lt;span style="color:#000000;" title="sql/sql"&gt;&lt;br /&gt;                    AgLibraryFolder alfo&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color:#993333;font-weight:bold;" title="sql/sql/keyword/reserved"&gt;JOIN&lt;/span&gt;&lt;span style="color:#000000;" title="sql/sql"&gt; AgLibraryRootFolder alrf &lt;/span&gt;&lt;span style="color:#993333;font-weight:bold;" title="sql/sql/keyword/reserved"&gt;ON&lt;/span&gt; &lt;span style="color:#008800;" title="sql/sql/symbol"&gt;(&lt;/span&gt;&lt;span style="color:#000000;" title="sql/sql"&gt;alfo&lt;/span&gt;&lt;span style="color:#008800;" title="sql/sql/symbol"&gt;.&lt;/span&gt;&lt;span style="color:#000000;" title="sql/sql"&gt;rootFolder&lt;/span&gt;&lt;span style="color:#008800;" title="sql/sql/operator"&gt;=&lt;/span&gt;&lt;span style="color:#000000;" title="sql/sql"&gt;alrf&lt;/span&gt;&lt;span style="color:#008800;" title="sql/sql/symbol"&gt;.&lt;/span&gt;&lt;span style="color:#000000;" title="sql/sql"&gt;id_local&lt;/span&gt;&lt;span style="color:#008800;" title="sql/sql/symbol"&gt;)&lt;/span&gt;&lt;br /&gt;                &lt;span style="color:#993333;font-weight:bold;" title="sql/sql/keyword/reserved"&gt;WHERE&lt;/span&gt;&lt;span style="color:#000000;" title="sql/sql"&gt; absolutePath&lt;/span&gt;&lt;span style="color:#008800;" title="sql/sql/operator"&gt;=&lt;/span&gt;&lt;span style="color:#ff0000;" title="sql/sql/string/start"&gt;'&lt;/span&gt;&lt;span style="color:#ff0000;" title="sql/sql/string"&gt;C:/ścieżka/do/pliku/&lt;/span&gt;&lt;span style="color:#ff0000;" title="sql/sql/string/end"&gt;'&lt;/span&gt;&lt;br /&gt;                &lt;span style="color:#008800;" title="sql/sql/symbol"&gt;)&lt;/span&gt;&lt;span style="color:#008800;" title="sql/sql/symbol"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9113514280353109536-9143958131580653076?l=photoshopworkout-pl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://photoshopworkout-pl.blogspot.com/feeds/9143958131580653076/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://photoshopworkout-pl.blogspot.com/2010/11/synchronizacja-bridgelightroom.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9113514280353109536/posts/default/9143958131580653076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9113514280353109536/posts/default/9143958131580653076'/><link rel='alternate' type='text/html' href='http://photoshopworkout-pl.blogspot.com/2010/11/synchronizacja-bridgelightroom.html' title='Synchronizacja Bridge⇔Lightroom'/><author><name>SzopeN</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14195305395473289469'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9113514280353109536.post-1575663364437112744</id><published>2010-08-06T06:05:00.000-07:00</published><updated>2010-08-06T06:12:04.403-07:00</updated><title type='text'>Ćwiczenia czas zacząć!</title><content type='html'>Witajcie na moim blogu poświęconym efektywnej pracy w &lt;strike&gt;Photoshopie&lt;/strike&gt; Edytorze Graficznym Adobe® Photoshop® [&lt;a href="http://www.adobe.com/misc/trade.html"&gt;http://www.adobe.com/misc/trade.html&lt;/a&gt;]. Aby uczynić zadość regułom używania nazwy tegoż edytora, jako stary programista C, pozwolę sobie na zdefiniowanie pewnych symboli preprocesora:&lt;br /&gt;&lt;pre style="border: 1px solid black; margin: 1em; padding: 0.7em;"&gt;#define Photoshop PS&lt;br /&gt;#define PS Edytor Graficzny&amp;nbsp;Adobe® Photoshop®&lt;/pre&gt;Uff.. teraz mogę już spać spokojnie ;)&lt;br /&gt;&lt;br /&gt;Jak już wspomniałem, ten blog będzie poświęcony technikom czyniącym pracę w &lt;i&gt;edytorze graficznym pewnej znajej firmy na literę A&lt;/i&gt;&amp;nbsp;szybką, łatwą i przyjemną. Oczywiście stanie się to zaraz po tym, jak wdrożymy pewne czasochłonne, skomplikowane a czasami nawet zagmatwane rozwiązania. IMHO warto jednak poświęcić nawet sporą porcję czasu, aby ułatwić sobie przyszłe życie, w zgodzie ze wzorem:&lt;br /&gt;&lt;pre style="border: 1px solid black; margin: 1em; padding: 0.7em;"&gt;t_saved =&amp;nbsp;t_noopt&amp;nbsp;* n - (t_impl + t_opt * n),&lt;/pre&gt;gdzie:&amp;nbsp;t_saved - czas oszczędzony, t_noopt - czas potrzebny na wykonanie czynności przed usprawnieniem,&amp;nbsp;t_opt - czas potrzebny na wykonanie czynności po wprowadzeniu usprawnienia,&amp;nbsp;t_impl - czas potrzebny na naukę i wdrożenie,&amp;nbsp;n - liczba powtórzeń czynności. Rzecz jasna śmiało zakładam, że t_opt &amp;lt; t_noopt, oraz że t_impl jest mniejszy od nieskończoności. W tych niezwykle sprzyjających warunkach optymalizacja często powtarzanej czynności (kiedyś w końcu) przyniesie nam wymierną oszczędność czasu :)&lt;br /&gt;&lt;br /&gt;Co &lt;b&gt;dokładnie&lt;/b&gt;&amp;nbsp;na blogu będzie? To się okaże. Przewiduję wpisy z zakresu:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Usprawniania pracy poprzez akcje&lt;/li&gt;&lt;li&gt;Automatyzowania pracy z wykorzystaniem skryptów w języku JavaScript w odmianie Adobe&lt;/li&gt;&lt;li&gt;Wyjaśnienie działania często źle lub nie do końca rozumianych operacji (np. zmiana trybów mieszania)&lt;/li&gt;&lt;li&gt;Prezentacja technik, które używam podczas obróbki fotografii&lt;/li&gt;&lt;li&gt;Ergonomii pracy&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Wiem jednak czego na pewno tu &lt;b&gt;nie będzie&lt;/b&gt;. Nie będzie powielania bezsensownych totoriali z innych źródeł. Nie będzie bezwartościowej paplaniny (poza tym postem ;)). Zagadnienia edycji grafiki i &lt;i&gt;workflow&lt;/i&gt; będę opisywał patrząc okiem informatyka i matematyka. Nie będę powstrzymywał się od wzorów i teorii! Postaram się jednak ładnie je wydzielić, aby &lt;i&gt;normalni&lt;/i&gt; czytelnicy też mieli jakiś pożytek i nie uciekali z tych stron z krzykiem.&lt;br /&gt;&lt;br /&gt;W założeniu mam prowadzenie dwujęzycznego blogu: wersja polska pod tym adresem (&lt;a href="http://photoshopworkout-pl.blogspot.com/"&gt;http://photoshopworkout-pl.blogspot.com&lt;/a&gt;), a angielska pod: &lt;a href="http://photoshopworkout.blogspot.com/"&gt;http://photoshopworkout.blogspot.com&lt;/a&gt;. Będę starał się utrzymywać synchronizację zawartości, jednak nie zawsze będzie to możliwe &lt;i&gt;w czasie rzeczywistym&lt;/i&gt;. Nie jestem w stanie przewidzieć, na którym z nich będę umieszczał posty w pierwszej kolejności.&lt;br /&gt;&lt;br /&gt;Zapraszam do eksploracji! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9113514280353109536-1575663364437112744?l=photoshopworkout-pl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='text/html' href='http://photoshopworkout.blogspot.com/' length='0'/><link rel='replies' type='application/atom+xml' href='http://photoshopworkout-pl.blogspot.com/feeds/1575663364437112744/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://photoshopworkout-pl.blogspot.com/2010/08/cwiczenia-czas-zaczac.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9113514280353109536/posts/default/1575663364437112744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9113514280353109536/posts/default/1575663364437112744'/><link rel='alternate' type='text/html' href='http://photoshopworkout-pl.blogspot.com/2010/08/cwiczenia-czas-zaczac.html' title='Ćwiczenia czas zacząć!'/><author><name>SzopeN</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14195305395473289469'/></author><thr:total>0</thr:total></entry></feed>