क्या मैं शॉटवेल पिक्चर्स डेटाबेस को सभी टैग को सहेज कर निर्यात कर सकता हूं?


14

मैंने बहुत सारी तस्वीरें शॉटवेल में आयात की हैं और कुछ समय टैग लगाने में बिताया है। क्या वे टैग शॉटवेल में लॉक-इन हैं या मैं उन्हें निर्यात कर सकता हूं (और फिर से आयात कर सकता हूं या अन्य सॉफ्टवेयर के साथ उपयोग कर सकता हूं)?

जवाबों:


22

मैं योरबा का संस्थापक हूं, जो शॉटवेल के निर्माता हैं। आपके प्रश्न के लिए धन्यवाद।

जब आप उन्हें निर्यात करते हैं तो शॉटवेल 0.7 तस्वीरों को मेटाडेटा (जैसे टैग और शीर्षक) लिखते हैं। मेटाडेटा EXIF, IPTC और / या XMP फॉर्मेट में लिखा जाता है (इस पर निर्भर करता है कि इनमें से कौन से फोटो को शुरू करने के लिए मौजूद थे)। अधिकांश अन्य फोटो प्रोग्राम इन प्रारूपों को पढ़ सकते हैं, इसलिए यदि आप शॉटवेल से अपनी तस्वीरें निर्यात करते हैं तो अन्य कार्यक्रमों को बिना किसी समस्या के उनके टैग पढ़ने में सक्षम होना चाहिए।

आगामी शोटवेल 0.8 उड़ान पर फोटो फ़ाइलों के लिए मेटाडेटा लिख ​​सकते हैं - इसे सक्षम करने के लिए, प्राथमिकताएं संवाद में " टैग, शीर्षक और अन्य मेटाडेटा को फोटो फ़ाइलों में लिखें " विकल्प चुनें । एक बार जब यह चुना जाता है, तो शॉटवेल आपको टैग करते ही फोटो फ़ाइलों में मेटाडेटा अपडेट कर देगा। इस सुविधा का उपयोग करने के लिए, स्रोत से शॉटवेल ट्रंक का निर्माण करें (देखें http://yorba.org/shotwell/install/#source ), या बस शॉटवेल 0.8 की प्रतीक्षा करें (जिसे हम दिसंबर में बाद में रिलीज़ करने की योजना बनाते हैं)।


+1 मैं शॉटवेल का नया उपयोगकर्ता हूं; आपके सभी ठीक काम के लिए धन्यवाद।
msw

3
क्या फ्लाई मेटा टैग लेखन कार्य पूर्वव्यापी है?
हॉल्टकविस्ट

@hultqvist, हाँ, मैंने अभी विकल्प की जाँच की है और शॉटवेल ने बाद में अपनी सभी तस्वीरों को लिखना शुरू कर दिया है
कुछ उपयोगकर्ता

9

दुर्भाग्य से शॉटवेल ने अपने डेटाबेस में टैग्स को एक्सिफ़, IPTC या XMP के रूप में एम्बेड करने के बजाय चित्रों में रखना प्रतीत होता है। आप एक्सफ़िल्टुल का उपयोग करके जांच कर सकते हैं, जिसे रिपॉजिटरी में उपलब्ध पैकेज लिबिमेज-एक्सफ़िल्टल-पर्ल को स्थापित करके स्थापित किया जा सकता है।

कुछ उदाहरण यहाँ देखें

आदेश का उपयोग करें; exiftool testpicture.jpgएक फोटो की जाँच करने के लिए जिसे testpicture.jpg कहा जाता है जिसे आपने पहले शॉटवेल के साथ टैग किया था। आप देखेंगे कि एक्सफोलटूल आउटपुट में कोई शॉटवेल टैग नहीं है।

Exiftool उपयोगिता आपके चित्रों को फ़ोटो में टैग एम्बेड कर टैग कर सकती है और इसके बारे में अच्छी बात यह है कि अधिकांश फ़ोटो प्रबंधक उनका उपयोग करेंगे, इसमें Shotwell शामिल है। उदाहरण के लिए:

exiftool -keywords=favourite -keywords=family testpicture.jpg

मौजूदा कीवर्ड सूची को दो नए कीवर्ड (पसंदीदा और परिवार) से बदलें।

जब Testpicture.jpg को Shotwell में आयात किया जाता है तो तस्वीर को पसंदीदा और परिवार के साथ टैग किया जाएगा

यह जानना उपयोगी हो सकता है कि शॉटवेल डेटाबेस आपके में स्थित एक स्क्वैलाइट डेटाबेस है; ~/.shotwell/dataनिर्देशिका और आमतौर पर कहा जाता है photo.db, आप इसे अपने कंप्यूटर पर कहीं और कॉपी कर सकते हैं और इसे sqlite के साथ एक्सेस कर सकते हैं।

Sqlite के लिए कुछ GUI फ़्रेंड हैं, यहाँ फ़ायरफ़ॉक्स के लिए एक है या आप sqliteman का उपयोग कर सकते हैं । इन दोनों छोरों पर सीएसवी सुविधाओं के लिए निर्यात है; जब आप अपने टैग को सीएसवी (कोमा सेपरेटेड वैल्यूज) में निर्यात करते हैं, तो आप जांच सकते हैं कि क्या कोई अन्य फोटो प्रबंधन सॉफ्टवेयर आयात करेगा और टैग को अपने डेटाबेस में उपयुक्त क्षेत्र में मैप करेगा। मेरा मानना ​​है कि दिगिकम ऐसा कर सकता है। डिजीकैम स्वयं फोटो में एक्सिफ डेटा को एम्बेड कर सकता है।

उम्मीद है कि शॉटवेल अधिक सुविधाओं के रूप में इस स्थिति को बदल देगा।

अद्यतन: हालांकि यह सच है कि शॉटवेल 0.7 अपने टैग को चित्रों में संग्रहीत नहीं करता है क्योंकि ये टैग बनाए जाते हैं, टैग को चित्रों में एम्बेड किया जा सकता है यदि आप उन्हें निर्यात करना चुनते हैं, तो एडम को यह स्पष्ट करने के लिए धन्यवाद। उम्मीद है कि jpegs से निपटने के दौरान यह निर्यात दोषरहित है। मुझे संदेह है कि अगर कोई निर्यात संवाद में स्केलिंग विकल्प के लिए मूल आकार का चयन करता है।


1
निर्यात के दौरान यदि स्केलिंग विकल्प मूल आकार का है और फोटो बिना रंग का है (कोई रंग समायोजन, फसल, आदि), यह दोषरहित है। ध्यान दें कि किसी फोटो के ओरिएंटेशन को बदलना दोषरहित है, साथ ही हम घुमाए गए चित्र को फिर से एन्कोडिंग करने के बजाय EXIF ​​ध्वज का उपयोग करते हैं।
जिम नेल्सन

मेरा मानना ​​है कि आप शेटवेल वरीयताओं में "टैग, शीर्षक और अन्य मेटाडेटा को फोटो फाइल में लिखें" बॉक्स की जांच कर सकते हैं, ताकि वह अपने टैग को छवि फ़ाइलों में लिख सकें।
जेल्लेकैट

2

शॉटवेल को अपग्रेड किए बिना इसे करने के लिए क्विक (गंदा?) पायथन कोड (मुझे लगता है कि 0.8.x शॉटवेल टैग के रूप में लिख सकता है, लेकिन आप इसे ल्यूसिड पर अपग्रेड नहीं कर सकते हैं)। यह बात स्टार-रेटिंग को टैग के रूप में लिख देगी (टिप्पणी है कि थोड़ा बाहर, जाहिर है, अगर आप ऐसा नहीं चाहते हैं)।

एक्सफोलिट की आवश्यकता है। यह किसी भी टैग की नकल करेगा जो शॉटवेल डेटाबेस और इमेजेज दोनों में हैं (यानी जो शॉटवेल आयात करते हैं जब यह इमेज इम्पोर्ट करता है) तो उसके लिए बाहर देखें। इसके अलावा, तस्वीरों के एक बड़े संग्रह के लिए काफी समय लगता है।

import os
conn = sqlite3.connect("/home/  username  /.shotwell/data/photo.db")

def get_tags():
    return [ x[0] for x in conn.execute("SELECT name FROM TagTable").fetchall()]

def tag_query(tag):
    return conn.execute("SELECT photo_id_list FROM TagTable WHERE name=?", (tag,)).fetchone()[0].split(",")

def get_tagged_photos(tag):
    for id in tag_query(tag):
        result = conn.execute("select filename from PhotoTable where id=?", (id,) ).fetchone()
        if result:
            yield result[0]

def get_photos_by_rating(rating):
    return [photo[0] for photo in conn.execute("select filename from PhotoTable where rating=?",(rating,)).fetchall()]

def get_tagging_commands():
    commands = []
    for rating in range(1,5):
        for photo in get_photos_by_rating(rating):
             commands.append("exiftool -overwrite_original_in_place -preserve -keywords+=rating%d \"%s\""% (rating,photo))

    for tag in [tag for tag in get_tags() if tag != "keep"]:
        for photo in get_tagged_photos(tag):
             commands.append("exiftool -overwrite_original_in_place -preserve -keywords+=%s \"%s\"" % (tag,photo))

    return commands

commands = get_tagging_commands()
for command in commands:
    print command
    os.system(command)

0

यदि आप एक बहुत अच्छा GUI उपकरण / ब्राउज़र चाहते हैं जो आपको Exif टैग (और इसलिए शॉटवेल में भी उपलब्ध है) का उपयोग करके आपकी छवियों को टैग करने देगा, तो मैं jBrout की सलाह देता हूं

मैंने अपने ब्लॉग पर jBrout के बारे में लिखा है

इसे स्थापित करने के लिए, Synaptic पर जाएं, सेटिंग्स / रिपॉजिटरी चुनें, "अन्य सॉफ़्टवेयर" टैब पर क्लिक करें, फिर "जोड़ें" बटन को हिट करें और इस पंक्ति में पेस्ट करें:

डिबेट http://jbrout.free.fr/download/debian बाइनरी /

फिर पुनः लोड करें और jBrout खोजें।


0

चूंकि फ़ाइल कमांड के ~/.shotwell/data/photo.dbरूप में पहचाना जाता photo.db: SQLite 3.x databaseहै, मैंने इसे खोलने के लिए SQLite Database Browser( sqlitebrowser) का उपयोग किया ।

हम्म् ... आप इसे पढ़ सकते हैं :-) इसमें सीवीएस एक्सपोर्ट फीचर है।

यह सामान्य जीयूआई दृष्टिकोण नहीं है लेकिन एक तरीका है।


0

मैंने शॉटवेल डेटाबेस को पार्स करने के लिए user38122 की स्क्रिप्ट का उपयोग करने की कोशिश की , और यह काम नहीं किया। जाहिरा तौर पर स्कीमा को हाल के संस्करणों में बदल दिया गया है। इसके बजाय मैंने निम्नलिखित स्क्रिप्ट लिखी जो टैग चौराहों को करने के लिए पांडा (जो मैं व्यक्तिगत रूप से एसक्यूएल लिखना पसंद करता हूं) का उपयोग करता हूं। नीचे दिए गए उदाहरण में मैं उन सभी छवियों को दिखाता हूं जिनमें टैग 'कैट' और टैग 'स्लीपिंग' दोनों हैं।

#!/usr/bin/python

# An example of how to query the shotwell database with pandas
import sqlite3, pandas, os, time, datetime

con = sqlite3.connect('/home/dov/.local/share/shotwell/data/photo.db')
photo_df = pandas.read_sql("SELECT * from PhotoTable", con)

for c in ['exposure_time','timestamp','time_created']:
  photo_df[c] = photo_df[c].map(datetime.datetime.fromtimestamp)

tag_df = pandas.read_sql('SELECT * from TagTable', con)

def get_image_ids(tag):
  """The image ids are stored morphed in the database as %016x"""
  global tag_df

  return set([int(s.replace('thumb',''),16)
              for s in tag_df[tag_df.name==tag].photo_id_list.iloc[0].split(',')
              if len(s)])

def get_photos(ids):
  """Get the photos for a list of ids"""
  global photo_df
  return photo_df[photo_df.id.isin(ids)].sort(['exposure_time'])

def view_pix(rows):
  cmd = ('eog ' + ' '.join(['"%s"'%row.filename
                            for idx,row in rows.iterrows()]))
#  print cmd
  os.system(cmd)

print 'querying...'

# An example of how to create an intersection of two tags
ids1 = get_image_ids('cat')
ids2 = get_image_ids('sleeping')
rows = get_photos(ids1.intersection(ids2))

# An example of how to filter the rows by timestamp
time_low,time_high = datetime.datetime(2006,8,1),datetime.datetime(2009,1,1)
rows = rows[(rows.exposure_time > time_low)
            & (rows.exposure_time < time_high)]
print '\n'.join([str(ts) for ts in rows['exposure_time']])
view_pix(rows)

print 'done'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.