Shotwell не пишет теги метаданных к изображениям [dубликат]

Удаление клиента и установка последней версии 3.4.0.10 исправили проблему. В моем случае проблема заключалась в том, что подключение через NX привело к окнам с невидимыми границами окон, если я вычислил место, где был значок закрытия, окно закрыто, минимизировано или максимизировано.

14
задан 19 December 2010 в 06:49

42 ответа

Поскольку ~ / .shotwell / data / photo.db идентифицируется как photo.db: база данных SQLite 3.x по команде файла, я использовал SQLite Браузер базы данных ( sqlitebrowser ), чтобы открыть его.

Хммм ... вы можете прочитать его :-) У него есть функция экспорта CVS.

Это не обычный подход к графическому интерфейсу, но есть способ.

0
ответ дан 7 August 2018 в 17:30

Я попытался использовать скрипт user38122 для разбора базы данных shotwell, и это не сработало. По-видимому, схема была изменена в последних версиях. Вместо этого я написал следующий скрипт, который использует pandas (который я лично предпочитаю писать SQL) для создания пересечений тегов. В приведенном ниже примере я показываю все изображения с тегом «cat» и тегом «sleep».

  #! / Usr / bin / python # Пример того, как запрашивать  База данных shotwell с 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) для c в ['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): "" "Идентификаторы изображений хранятся в базе данных как% 016x" "" global tag_df return set ([int (s.replace (' thumb ',' '), 16  ) для s в tag_df [tag_df.name == tag] .photo_id_list.iloc [0] .split (','), если len (s)]) def get_photos (ids): "" "Получить фотографии для списка  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 для idx, строка в rows.iterrows ()]))  # print cmd os.system (cmd) print 'querying ...' # Пример того, как создать пересечение двух тегов ids1 = get_image_ids ('cat') ids2 = get_image_ids ('sleep') rows = get_photos (ids1.  пересечение (ids2)) # Пример того, как фильтровать строки по timestamp time_low, time_high = datetime.datetime (2006,8,1), datetime.datetime (2009,1,1) rows = rows [(rows.exposure_time & gt;  ;  time_low) & amp;  (rows.exposure_time & lt; time_high)] print '\n'.join ([str (ts) для ts в строках [' exposure_time ']]) view_pix (rows) print' done ' 
0
ответ дан 7 August 2018 в 17:30

К сожалению, Shotwell, похоже, сохраняет теги в своей собственной базе данных, а не встраивает их как exif, IPTC или XMP в изображения. Вы можете проверить с помощью exiftool, который можно установить, установив пакет libimage-exiftool-perl , доступный в репозиториях.

См. примеры здесь

, используя команду; exiftool testpicture.jpg , чтобы проверить фотографию с именем testpicture.jpg, которую вы ранее отметили с помощью Shotwell. Вы увидите, что вывод exiftool не содержит тегов Shotwell.

Утилита exiftool может помечать ваши изображения, вставляя теги на фотографию, и это хорошо, что большинство фотожурналистов будут использовать их, включая Shotwell , Например:

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

Заменить существующий список ключевых слов двумя новыми ключевыми словами (любимым и семейным).

Когда testpicture.jpg импортируется в Shotwell, изображение будет помечено любимым и семейным

. Может быть полезно знать, что база данных Shotwell представляет собой базу данных sqlite, расположенную в вашем; ~ / .shotwell / data и обычно называется photo.db, вы можете скопировать его в другое место на свой компьютер и получить доступ к нему с помощью sqlite.

Есть несколько интерфейсов GUI для sqlite, есть один для firefox здесь , или вы можете использовать sqliteman . Оба этих интерфейса имеют экспорт в функции csv; когда вы экспортируете свои теги в csv (Comma Separated Values), вы можете проверить, будет ли какое-либо другое программное обеспечение для управления фотографиями импортировать и сопоставить теги с соответствующим полем в своих собственных базах данных. Я считаю, что Digikam может это сделать.

UPDATE: Хотя верно, что Shotwell 0.7 не хранит свои теги.

Надеюсь, что Shotwell получит больше возможностей. на рисунках, созданных этими тегами, теги могут быть встроены в изображения, если вы решите их экспортировать, благодаря Адаму, чтобы сделать это понятным. Надеемся, что этот экспорт без потерь при работе с jpeg. Я подозреваю, что если вы выберите исходный размер для параметра «Масштабирование» в диалоговом окне экспорта.

9
ответ дан 10 August 2018 в 06:26

Быстрый (грязный?) код python для этого, не обновляя Shotwell (я думаю, что с 0.8.x Shotwell может выписывать теги, но вы не можете обновить их на Lucid). Эта вещь будет выписывать звездные рейтинги как теги (комментарий, который бит, очевидно, если вы этого не хотите).

Требуется exiftool. Он будет дублировать любые теги, которые находятся в базе данных shotwell, а также изображения (то есть те, которые Shotwell импортировал при импорте изображений), поэтому следите за этим. Кроме того, занимает довольно много времени для большой коллекции фотографий.

  import os conn = sqlite3.connect ("/ home / username /.shotwell/data/photo.db") def get_tags (  ): return [x [0] для x в conn.execute ("SELECT name FROM TagTable"). fetchall ()] def tag_query (tag): return conn.execute ("SELECT photo_id_list FROM TagTable WHERE name =?", (  тег)). fetchone () [0] .split (",") def get_tagged_photos (tag): для id в tag_query (tag): result = conn.execute ("select filename from PhotoTable, где id =?", (  id,)) .fetchone (), если результат: результат результата [0] def get_photos_by_rating (рейтинг): return [fото [0] для фотографии в conn.execute («выберите имя файла из PhotoTable, где рейтинг =?», (рейтинг,)  ) .fetchall ()] def get_tagging_commands (): commands = [] для оценки в диапазоне (1,5): для фото в get_photos_by_rating (рейтинг): commands.append ("exiftool -overwrite_original_in_place -preserve -keywords + = рейтинг% d \  "% s \" "% (рейтинг, фотография)) для тега в теге тега в get_tags (), если tag! =" keep "]: для фото в get_tagged_photos (tag): com  mands.append ("exiftool -overwrite_original_in_place -preserve -keywords + =% s \"% s \ ""% (тег, фотография)) команды return команды = get_tagging_commands () для команды в командах: команда print os.system (команда) [  ! d0] 
2
ответ дан 10 August 2018 в 06:26

Поскольку ~ / .shotwell / data / photo.db идентифицируется как photo.db: база данных SQLite 3.x по команде файла, я использовал SQLite Браузер базы данных ( sqlitebrowser ), чтобы открыть его.

Хммм ... вы можете прочитать его :-) У него есть функция экспорта CVS.

Это не обычный подход к графическому интерфейсу, но есть способ.

0
ответ дан 10 August 2018 в 06:26

Если вы хотите действительно хороший инструмент / браузер GUI, который позволит вам пометить ваши изображения с помощью тегов Exif (и, следовательно, также доступных в Shotwell), я рекомендую jBrout .

Я написал о jBrout в своем блоге .

Чтобы установить его, перейдите в Synaptic, выберите настройки / репозитории, перейдите на вкладку «Другое программное обеспечение», затем нажмите кнопку " Добавить "и вставить в эту строку:

deb http://jbrout.free.fr/download/debian binary /

Затем перезагрузите и выполните поиск jBrout.

0
ответ дан 10 August 2018 в 06:26

Я попытался использовать скрипт user38122 для разбора базы данных shotwell, и это не сработало. По-видимому, схема была изменена в последних версиях. Вместо этого я написал следующий скрипт, который использует pandas (который я лично предпочитаю писать SQL) для создания пересечений тегов. В приведенном ниже примере я показываю все изображения с тегом «cat» и тегом «sleep».

  #! / Usr / bin / python # Пример того, как запрашивать  База данных shotwell с 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) для c в ['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): "" "Идентификаторы изображений хранятся в базе данных как% 016x" "" global tag_df return set ([int (s.replace (' thumb ',' '), 16  ) для s в tag_df [tag_df.name == tag] .photo_id_list.iloc [0] .split (','), если len (s)]) def get_photos (ids): "" "Получить фотографии для списка  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 для idx, строка в rows.iterrows ()]))  # print cmd os.system (cmd) print 'querying ...' # Пример того, как создать пересечение двух тегов ids1 = get_image_ids ('cat') ids2 = get_image_ids ('sleep') rows = get_photos (ids1.  пересечение (ids2)) # Пример того, как фильтровать строки по timestamp time_low, time_high = datetime.datetime (2006,8,1), datetime.datetime (2009,1,1) rows = rows [(rows.exposure_time & gt;  ;  time_low) & amp;  (rows.exposure_time & lt; time_high)] print '\n'.join ([str (ts) для ts в строках [' exposure_time ']]) view_pix (rows) print' done ' 
0
ответ дан 10 August 2018 в 06:26

К сожалению, Shotwell, похоже, сохраняет теги в своей собственной базе данных, а не встраивает их как exif, IPTC или XMP в изображения. Вы можете проверить с помощью exiftool, который можно установить, установив пакет libimage-exiftool-perl , доступный в репозиториях.

См. примеры здесь

, используя команду; exiftool testpicture.jpg , чтобы проверить фотографию с именем testpicture.jpg, которую вы ранее отметили с помощью Shotwell. Вы увидите, что вывод exiftool не содержит тегов Shotwell.

Утилита exiftool может помечать ваши изображения, вставляя теги на фотографию, и это хорошо, что большинство фотожурналистов будут использовать их, включая Shotwell , Например:

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

Заменить существующий список ключевых слов двумя новыми ключевыми словами (любимым и семейным).

Когда testpicture.jpg импортируется в Shotwell, изображение будет помечено любимым и семейным

. Может быть полезно знать, что база данных Shotwell представляет собой базу данных sqlite, расположенную в вашем; ~ / .shotwell / data и обычно называется photo.db, вы можете скопировать его в другое место на свой компьютер и получить доступ к нему с помощью sqlite.

Есть несколько интерфейсов GUI для sqlite, есть один для firefox здесь , или вы можете использовать sqliteman . Оба этих интерфейса имеют экспорт в функции csv; когда вы экспортируете свои теги в csv (Comma Separated Values), вы можете проверить, будет ли какое-либо другое программное обеспечение для управления фотографиями импортировать и сопоставить теги с соответствующим полем в своих собственных базах данных. Я считаю, что Digikam может это сделать.

UPDATE: Хотя верно, что Shotwell 0.7 не хранит свои теги.

Надеюсь, что Shotwell получит больше возможностей. на рисунках, созданных этими тегами, теги могут быть встроены в изображения, если вы решите их экспортировать, благодаря Адаму, чтобы сделать это понятным. Надеемся, что этот экспорт без потерь при работе с jpeg. Я подозреваю, что если вы выберите исходный размер для параметра «Масштабирование» в диалоговом окне экспорта.

9
ответ дан 15 August 2018 в 18:15
  • 1
    Во время экспорта, если параметр «Масштабирование» имеет размер оригинала и , фото неотредактировано (без корректировки цвета, обрезки и т. Д.), Оно без потерь. Обратите внимание, что изменение ориентации фотографии также без потерь, поскольку мы используем флаг EXIF, а не перекодируем повернутое изображение. – Jim Nelson 22 February 2011 в 00:21
  • 2
    Приятно знать, спасибо – Sabacon 22 February 2011 в 19:19
  • 3
    Я считаю, что вы можете проверить & quot; Напишите теги, заголовки и другие метаданные в файлы фотографий & quot; в настройках Shetwell, чтобы он записывал свои метки в файлы изображений. – JellicleCat 14 March 2015 в 08:16

Поскольку ~ / .shotwell / data / photo.db идентифицируется как photo.db: база данных SQLite 3.x по команде файла, я использовал SQLite Браузер базы данных ( sqlitebrowser ), чтобы открыть его.

Хммм ... вы можете прочитать его :-) У него есть функция экспорта CVS.

Это не обычный подход к графическому интерфейсу, но есть способ.

0
ответ дан 15 August 2018 в 18:15

Если вы хотите действительно хороший инструмент / браузер GUI, который позволит вам пометить ваши изображения с помощью тегов Exif (и, следовательно, также доступных в Shotwell), я рекомендую jBrout .

Я написал о jBrout в своем блоге .

Чтобы установить его, перейдите в Synaptic, выберите настройки / репозитории, перейдите на вкладку «Другое программное обеспечение», затем нажмите кнопку " Добавить "и вставить в эту строку:

deb http://jbrout.free.fr/download/debian binary /

Затем перезагрузите и выполните поиск jBrout.

0
ответ дан 15 August 2018 в 18:15

Быстрый (грязный?) код python для этого, не обновляя Shotwell (я думаю, что с 0.8.x Shotwell может выписывать теги, но вы не можете обновить их на Lucid). Эта вещь будет выписывать звездные рейтинги как теги (комментарий, который бит, очевидно, если вы этого не хотите).

Требуется exiftool. Он будет дублировать любые теги, которые находятся в базе данных shotwell, а также изображения (то есть те, которые Shotwell импортировал при импорте изображений), поэтому следите за этим. Кроме того, занимает довольно много времени для большой коллекции фотографий.

  import os conn = sqlite3.connect ("/ home / username /.shotwell/data/photo.db") def get_tags (  ): return [x [0] для x в conn.execute ("SELECT name FROM TagTable"). fetchall ()] def tag_query (tag): return conn.execute ("SELECT photo_id_list FROM TagTable WHERE name =?", (  тег)). fetchone () [0] .split (",") def get_tagged_photos (tag): для id в tag_query (tag): result = conn.execute ("select filename from PhotoTable, где id =?", (  id,)) .fetchone (), если результат: результат результата [0] def get_photos_by_rating (рейтинг): return [fото [0] для фотографии в conn.execute («выберите имя файла из PhotoTable, где рейтинг =?», (рейтинг,)  ) .fetchall ()] def get_tagging_commands (): commands = [] для оценки в диапазоне (1,5): для фото в get_photos_by_rating (рейтинг): commands.append ("exiftool -overwrite_original_in_place -preserve -keywords + = рейтинг% d \  "% s \" "% (рейтинг, фотография)) для тега в теге тега в get_tags (), если tag! =" keep "]: для фото в get_tagged_photos (tag): com  mands.append ("exiftool -overwrite_original_in_place -preserve -keywords + =% s \"% s \ ""% (тег, фотография)) команды return команды = get_tagging_commands () для команды в командах: команда print os.system (команда) [  ! d0] 
2
ответ дан 15 August 2018 в 18:15

Я попытался использовать скрипт user38122 для разбора базы данных shotwell, и это не сработало. По-видимому, схема была изменена в последних версиях. Вместо этого я написал следующий скрипт, который использует pandas (который я лично предпочитаю писать SQL) для создания пересечений тегов. В приведенном ниже примере я показываю все изображения с тегом «cat» и тегом «sleep».

  #! / Usr / bin / python # Пример того, как запрашивать  База данных shotwell с 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) для c в ['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): "" "Идентификаторы изображений хранятся в базе данных как% 016x" "" global tag_df return set ([int (s.replace (' thumb ',' '), 16  ) для s в tag_df [tag_df.name == tag] .photo_id_list.iloc [0] .split (','), если len (s)]) def get_photos (ids): "" "Получить фотографии для списка  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 для idx, строка в rows.iterrows ()]))  # print cmd os.system (cmd) print 'querying ...' # Пример того, как создать пересечение двух тегов ids1 = get_image_ids ('cat') ids2 = get_image_ids ('sleep') rows = get_photos (ids1.  пересечение (ids2)) # Пример того, как фильтровать строки по timestamp time_low, time_high = datetime.datetime (2006,8,1), datetime.datetime (2009,1,1) rows = rows [(rows.exposure_time & gt;  ;  time_low) & amp;  (rows.exposure_time & lt; time_high)] print '\n'.join ([str (ts) для ts в строках [' exposure_time ']]) view_pix (rows) print' done ' 
0
ответ дан 15 August 2018 в 18:15

Другие вопросы по тегам:

Похожие вопросы: