mExiftoolWritingExamples.sh 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. #!/bin/bash
  2. E='echo -e';e='echo -en';trap "R;exit" 2
  3. ESC=$( $e "\e")
  4. TPUT(){ $e "\e[${1};${2}H" ;}
  5. CLEAR(){ $e "\ec";}
  6. # 25 возможно это
  7. CIVIS(){ $e "\e[?25l";}
  8. # это цвет текста списка перед курсором при значении 0 в переменной UNMARK(){ $e "\e[0m";}
  9. MARK(){ $e "\e[1;90m";}
  10. # 0 это цвет заднего фона списка
  11. UNMARK(){ $e "\e[0m";}
  12. # ~~~~~~~~ Эти строки задают цвет фона ~~~~~~~~
  13. R(){ CLEAR ;stty sane;CLEAR;};
  14. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  15. HEAD(){ for (( a=2; a<=30; a++ ))
  16. do
  17. TPUT $a 1
  18. $E "\033[34m\xE2\x94\x82 \xE2\x94\x82\033[0m";
  19. done
  20. TPUT 7 3
  21. $E "\033[36m#\033[0m";
  22. TPUT 10 3
  23. $E "\033[36m#\033[0m";
  24. TPUT 29 4
  25. $E "\033[32mUp \xE2\x86\x91 \xE2\x86\x93 Down Select Enter\033[0m";
  26. MARK;TPUT 1 1
  27. $E "\033[0m\033[34m+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+\033[0m" ;UNMARK;}
  28. i=0; CLEAR; CIVIS;NULL=/dev/null
  29. FOOT(){ MARK;TPUT 31 1
  30. $E "\033[0m\033[34m+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+\033[0m";UNMARK;}
  31. # это управляет кнопками ввер/хвниз
  32. i=0; CLEAR; CIVIS;NULL=/dev/null
  33. #
  34. ARROW(){ IFS= read -s -n1 key 2>/dev/null >&2
  35. if [[ $key = $ESC ]];then
  36. read -s -n1 key 2>/dev/null >&2;
  37. if [[ $key = \[ ]]; then
  38. read -s -n1 key 2>/dev/null >&2;
  39. if [[ $key = A ]]; then echo up;fi
  40. if [[ $key = B ]];then echo dn;fi
  41. fi
  42. fi
  43. if [[ "$key" == "$($e \\x0A)" ]];then echo enter;fi;}
  44. M0(){ TPUT 2 3; $e "Примечание \033[32m Note \033[0m";}
  45. M1(){ TPUT 3 3; $e "Напишите новый комментарий к изображению JPG \033[32m exiftool -Comment='This is a new comment' dst.jpg \033[0m";}
  46. M2(){ TPUT 4 3; $e "Удалите комментарии ко всем изображениям JPG в текущем каталоге \033[32m exiftool -comment= -o newdir -ext jpg \033[0m";}
  47. M3(){ TPUT 5 3; $e "Замените существующий список ключевых слов двумя новыми ключевыми словами \033[32m exiftool -keywords=EXIF -keywords=editor dst.jpg \033[0m";}
  48. M4(){ TPUT 6 3; $e "Скопируйте исходное изображение в новый файл и добавьте ключевое слово \033[32m exiftool -Keywords+=word -o newfile.jpg src.jpg \033[0m";}
  49. M5(){ TPUT 7 3; $e "Уменьшите значение ExposureCompensation на 0,5 EV \033[32m exiftool -exposurecompensation+=-0.5 a.jpg \033[0m";}
  50. M6(){ TPUT 8 3; $e "Удалите информацию о кредите из всех файлов в каталоге, где кредит был «xxx» \033[32m exiftool -credit-=xxx dir \033[0m";}
  51. M7(){ TPUT 9 3; $e "Напишите альтернативный язык для XMP \033[32m exiftool -xmp:description-de='k&uuml;hl' -E dst.jpg \033[0m";}
  52. M8(){ TPUT 10 3; $e "Удалите всю метаинформацию с изображения \033[32m exiftool -all= dst.jpg \033[0m";}
  53. M9(){ TPUT 11 3; $e "Удалите всю метаинформацию с изображения и снова добавьте комментарий \033[32m exiftool -all= -comment='lonely' dst.jpg \033[0m";}
  54. M10(){ TPUT 12 3; $e "Удалите с изображения всю метаинформацию, кроме группы JFIF \033[32m exiftool -all= --jfif:all dst.jpg \033[0m";}
  55. M11(){ TPUT 13 3; $e "Удалите метаинформацию Photoshop из изображения \033[32m exiftool -Photoshop:All= dst.jpg \033[0m";}
  56. M12(){ TPUT 14 3; $e "Рекурсивно удалить всю информацию XMP-crss из изображений в каталоге \033[32m exiftool -r -XMP-crss:all= DIR \033[0m";}
  57. M13(){ TPUT 15 3; $e "Установите эскиз изображения из указанного файла \033[32m exiftool '-ThumbnailImage<=thumb.jpg' dst.jpg \033[0m";}
  58. M14(){ TPUT 16 3; $e "Рекурсивно записывать изображения JPEG с именами файлов, заканчивающимися на «_JFR.JPG»\033[32m exiftool '-JpgFromRaw<=%d%f_JFR.JPG' -ext NEF -r \033[0m";}
  59. M15(){ TPUT 17 3; $e "Отрегулируйте исходную дату / время для всех изображений в каталоге «dir» \033[32m exiftool -DateTimeOriginal-='0:0:0 1:30:0' dir \033[0m";}
  60. M16(){ TPUT 18 3; $e "Добавьте 3 часа к отметкам времени CreateDate и ModifyDate двух изображений \033[32m exiftool -createdate+=3 -modifydate+=3 a.jpg b.jpg \033[0m";}
  61. M17(){ TPUT 19 3; $e "Сдвиньте значения DateTimeOriginal, CreateDate и ModifyDate для всех изображений Canon \033[32m exiftool -AllDates+=1:30 -if '\$make eq \"Canon\"' dir \033[0m";}
  62. M18(){ TPUT 20 3; $e "Напишите тег для группы XMP из двух изображений \033[32m exiftool -xmp:city=Kingston image1.jpg image2.nef \033[0m";}
  63. M19(){ TPUT 21 3; $e "Удаляйте тег «LightSource», только если он неизвестен со значением 0 \033[32m exiftool -LightSource-='Unknown (0)' dst.tiff \033[0m";}
  64. M20(){ TPUT 22 3; $e "Установите «Баланс белого» на «Вольфрам», только если ранее он был «Авто» \033[32m exiftool -whitebalance-=auto -WhiteBalance=tung dst.jpg \033[0m";}
  65. M21(){ TPUT 23 3; $e "Напишите новый комментарий, только если у изображения его еще нет \033[32m exiftool -comment-= -comment='new comment' a.jpg \033[0m";}
  66. M22(){ TPUT 24 3; $e "Создайте файлы данных метаинформации XMP для всех изображений в «каталоге» \033[32m exiftool -o %d%f.xmp dir \033[0m";}
  67. M23(){ TPUT 25 3; $e "Создавайте файл данных XMP только из тегов, определенных в командной строке \033[32m exiftool -o test.xmp -owner=Phil -title='XMP File' \033[0m";}
  68. M24(){ TPUT 26 3; $e "Запишите ICC_Profile в изображение из одноименного файла «.icc» \033[32m exiftool '-ICC_Profile<=%d%f.icc' image.jpg \033[0m";}
  69. M25(){ TPUT 27 3; $e "Напишите структурированную информацию XMP \033[32m exiftool -hierarchicalkeywords='{keyword=one,children={keyword=B}}'\033[0m";}
  70. M26(){ TPUT 28 3; $e "Удалите любой трейлер, найденный после конца изображения (EOI) в файле JPEG \033[32m exiftool -trailer:all= image.jpg \033[0m";}
  71. #
  72. M27(){ TPUT 30 3; $e "Выход \033[32m EXIT \033[0m";}
  73. LM=27
  74. MENU(){ for each in $(seq 0 $LM);do M${each};done;}
  75. POS(){ if [[ $cur == up ]];then ((i--));fi
  76. if [[ $cur == dn ]];then ((i++));fi
  77. if [[ $i -lt 0 ]];then i=$LM;fi
  78. if [[ $i -gt $LM ]];then i=0;fi;}
  79. REFRESH(){ after=$((i+1)); before=$((i-1))
  80. if [[ $before -lt 0 ]];then before=$LM;fi
  81. if [[ $after -gt $LM ]];then after=0;fi
  82. if [[ $j -lt $i ]];then UNMARK;M$before;else UNMARK;M$after;fi
  83. if [[ $after -eq 0 ]] || [ $before -eq $LM ];then
  84. UNMARK; M$before; M$after;fi;j=$i;UNMARK;M$before;M$after;}
  85. INIT(){ R;HEAD;FOOT;MENU;}
  86. SC(){ REFRESH;MARK;$S;$b;cur=`ARROW`;}
  87. # Функция возвращения в меню
  88. ES(){ MARK;$e " ENTER = main menu ";$b;read;INIT;};INIT
  89. while [[ "$O" != " " ]]; do case $i in
  90. 0) S=M0;SC;if [[ $cur == enter ]];then R;echo " Обратите внимание, что необходимо заключать в кавычки аргументы, содержащие определенные специальные символы, такие как «>», «<» или любые пробелы. Эти методы
  91. цитирования зависит от оболочки, но приведенные ниже примеры будут работать для большинства оболочек Unix. Однако в оболочке Windows cmd следует использовать
  92. двойные кавычки (eg. -Comment=\"This is a new comment\")";ES;fi;;
  93. 1) S=M1;SC;if [[ $cur == enter ]];then R;echo " Напишите новый комментарий к изображению JPG (заменяет любой существующий комментарий).";ES;fi;;
  94. 2) S=M2;SC;if [[ $cur == enter ]];then R;echo " Удалите комментарии ко всем изображениям JPG в текущем каталоге, записав измененные изображения в новый каталог.";ES;fi;;
  95. 3) S=M3;SC;if [[ $cur == enter ]];then R;echo " Замените существующий список ключевых слов двумя новыми ключевыми словами («EXIF» и «редактор»).";ES;fi;;
  96. 4) S=M4;SC;if [[ $cur == enter ]];then R;echo " Скопируйте исходное изображение в новый файл и добавьте ключевое слово («слово») в текущий список ключевых слов.";ES;fi;;
  97. 5) S=M5;SC;if [[ $cur == enter ]];then R;echo " Уменьшите значение ExposureCompensation на 0,5 EV. Обратите внимание, что + = с отрицательным значением используется для уменьшения, потому что используется
  98. оператор - = для условного удаления (см. следующий пример).";ES;fi;;
  99. 6) S=M6;SC;if [[ $cur == enter ]];then R;echo " Удалите информацию о кредите из всех файлов в каталоге, где значение кредита было «xxx».";ES;fi;;
  100. 7) S=M7;SC;if [[ $cur == enter ]];then R;echo " Напишите альтернативный язык для XMP: Описание, используя экранирование символов HTML для ввода специальных символов.";ES;fi;;
  101. 8) S=M8;SC;if [[ $cur == enter ]];then R;echo " Удалите всю метаинформацию с изображения. Примечание. НЕ следует делать это с изображениями RAW (кроме DNG), поскольку проприетарные форматы изображений RAW
  102. часто содержат информация в примечаниях производителя, необходимая для преобразования изображения.";ES;fi;;
  103. 9) S=M9;SC;if [[ $cur == enter ]];then R;echo " Удалите всю метаинформацию с изображения и снова добавьте комментарий (обратите внимание, что порядок важен: «-comment = 'lonely' -all =» также удалит новый
  104. комментарий.)";ES;fi;;
  105. 10) S=M10;SC;if [[ $cur == enter ]];then R;echo " Удалите с изображения всю метаинформацию, кроме группы JFIF.";ES;fi;;
  106. 11) S=M11;SC;if [[ $cur == enter ]];then R;echo " Удалите метаинформацию Photoshop из изображения (обратите внимание, что информация Photoshop также включает IPTC).";ES;fi;;
  107. 12) S=M12;SC;if [[ $cur == enter ]];then R;echo " Рекурсивно удалить всю информацию XMP-crss из изображений в каталоге.";ES;fi;;
  108. 13) S=M13;SC;if [[ $cur == enter ]];then R;echo " Установите эскиз изображения из указанного файла (Примечание: кавычки необходимы для предотвращения перенаправления оболочки).";ES;fi;;
  109. 14) S=M14;SC;if [[ $cur == enter ]];then R;echo " Рекурсивно записывать изображения JPEG с именами файлов, заканчивающимися на «_JFR.JPG», в тег JpgFromRaw файлов с одинаковыми именами с расширением «.NEF» в
  110. текущем каталог. (Это обратная команда «-JpgFromRaw» в разделе «ЧТЕНИЕ ПРИМЕРОВ» выше.)";ES;fi;;
  111. 15) S=M15;SC;if [[ $cur == enter ]];then R;echo " Отрегулируйте исходную дату / время для всех изображений в каталоге «dir», вычтя один час 30 минут. (Это эквивалентно «-DateTimeOriginal- = 1.5». Подробнее см.
  112. Image :: ExifTool :: Shift.pl.)";ES;fi;;
  113. 16) S=M16;SC;if [[ $cur == enter ]];then R;echo " Добавьте 3 часа к отметкам времени CreateDate и ModifyDate двух изображений.";ES;fi;;
  114. 17) S=M17;SC;if [[ $cur == enter ]];then R;echo " Сдвиньте значения DateTimeOriginal, CreateDate и ModifyDate вперед на 1 час 30 минут для всех изображений Canon в каталоге. (Все даты Тег предоставляется как
  115. ярлык для этих трех тегов, что позволяет получить к ним доступ через один тег.)";ES;fi;;
  116. 18) S=M18;SC;if [[ $cur == enter ]];then R;echo " Напишите тег для группы XMP из двух изображений. (Без «xmp:» этот тег был бы записан в группу IPTC, поскольку «Город» существует в обеих, а IPTC -
  117. предпочтительнее по умолчанию.)";ES;fi;;
  118. 19) S=M19;SC;if [[ $cur == enter ]];then R;echo " Удаляйте тег «LightSource», только если он неизвестен со значением 0.";ES;fi;;
  119. 20) S=M20;SC;if [[ $cur == enter ]];then R;echo " Установите «Баланс белого» на «Вольфрам», только если ранее он был «Авто».";ES;fi;;
  120. 21) S=M21;SC;if [[ $cur == enter ]];then R;echo " Напишите новый комментарий, только если у изображения его еще нет.";ES;fi;;
  121. 22) S=M22;SC;if [[ $cur == enter ]];then R;echo " Создайте файлы данных метаинформации XMP для всех изображений в «каталоге».";ES;fi;;
  122. 23) S=M23;SC;if [[ $cur == enter ]];then R;echo " Создавайте файл данных XMP только из тегов, определенных в командной строке.";ES;fi;;
  123. 24) S=M24;SC;if [[ $cur == enter ]];then R;echo " Запишите ICC_Profile в изображение из одноименного файла «.icc».";ES;fi;;
  124. 25) S=M25;SC;if [[ $cur == enter ]];then R;echo " Напишите структурированную информацию XMP. См: Https://exiftool.org/struct.html для получения более подробной информации.";ES;fi;;
  125. 26) S=M26;SC;if [[ $cur == enter ]];then R;echo " Удалите любой трейлер, найденный после конца изображения (EOI) в файле JPEG. Некоторые цифровые камеры сохраняют большое изображение предварительного просмотра
  126. после JPEG EOI, и размер файла можно значительно уменьшить, удалив этот трейлер. Список распознанных трейлеров JPEG см. В документации по тегам JPEG.";ES;fi;;
  127. #
  128. 27) S=M27;SC;if [[ $cur == enter ]];then R;clear;exit 0;fi;;
  129. esac;POS;done