Комментарии 42
И что в итоге? 3 Мб вместо 10 Мб?
Не удивлюсь, если раньше люди думали "не буду снимать на цветную пленку, хватит и черно-белой. Тем более она дешевле", а теперь их потомки натравливают на эти фото ИИ чтобы раскрасить.
Двадцать первый век, 4-терабайтные винчестеры по 100 долларов, а человеку настолько жалко потратить 10 мегабайт на запавший в душу снимок, что он ажно программу для пережатия написал. Так на винчестер поместится не 400 тысяч фотографий, а целый миллион! Вдруг у меня будет миллион любимых фотографий, но не будет лишних 100 долларов на ещё один винчестер? «Tech Entrepreneur | Advisor | Consultant Over a decade of mobile experience at your service. I help business owners navigate and leverage technology.» ну никак не может позволить себе потратить лишние 100 у. е. на какие-то там картинки.
И коли уж так сурово жаба душит, то что мешало в настройках айфона выставить меньшее разрешение?
2. Фотографии должны быть не только на винчестере, но и на телефоне, чтобы в любой момент можно было вернуться к ним. А там с терабайтами не всё так просто.
3. У телефона далеки от идеала алгоритмы сжатия, поэтому всегда снимаю в максимальном качестве и потом уменьшаю, если надо. Да и потом можно забыть, что выставил мЕньшее разрешение, и наснимать ценных кадров в уменьшенном разрешении.
Не знаю как на Мак, а на Вин уже лет 10 пользуюсь XnView, там и пакетная обработка с фильтрами, и возможность сочетанием клавиш прямо при просмотре поворачивать фотографии без перекодировки.
> One picture in particular caught my attention: a goat.
То бишь привлёк внимание. А в переводе читается так, как будто этот несчастный снимок так покорил сердце автора, что он ну никак не может выделить ему лишние 10 мегабайт места на диске.
Нет конечно статью то надо слепить, пусть даже из фото козы
Голосую за XnView.
Мне не удалось найти инструмент для решения этой простой, но очень важной для меня задачи.
За умение пользоваться гуглом твердая двойка)).
XnView, IrfanView и думаю еще многие другие умеют пакетно переживать фото
Не всё устраивает в качестве фотоархива, но умеет писать и читать теги из JPEG(exif)/XMP, хранить в своей базе _или_ записывать их в файлы. Какую-то часть РАВ-ов читает сам, но меньше, чем хотелось.
Организация фото по: тегам, событиям («типа группа»), датам, каталогам на диске, оценкам и «меткам». Теги может писать/читать в файлы, остальное — на уровне БД (оценками не пользуюсь, мож и их пишет)
Можно запускать с разными конфигами — типа «архив с телефона» и «архив фото-любимого-клуба». Есть минимальная правка по яркости-цветности и кучка плагинов (не пользуюсь, не знаю как оно) для экспорта в соцсети и прочие внешние хранилища
Сам даже не думал ставить тэги в телефоне. Максимум — сразу раскидываю по папкам (был mi-gallery — там это группами, что ли, зовётся. Сейчас «Simple gallery» — умеет перемещать в папки).
Дальше rsync-wrapper-ом в комп, а там посматриваю при импорте и правлю тег на всё-из-папки если надо
Бесплатная XnView MP может читать теги из фотографий и записывать в IPTC/XMP. Только надо в настройках это включить на вкладке Metadata. Теги там зовутся Categories, можно как фильтровать по ним, так и назначать. Есть два режима — либо галочками проставлять теги из списка, либо в Category Sets самому раскидать как удобно (например Животные: коза, собака, кошка. Время суток: утро, день, ночь).
Под Android можно вбить в поиск "IPTC tagger" и выбрать что-то из выдачи. Там немного, но есть.
У QNAP есть автоматическое растаскивание фото по папкам на основе распознанных на них объектов.
Покупайте наше облако
Там HEIC, он тяжёлый
А вообще да — купите у нас облако побольше!
И из прогрессивного (всмсл современного) HEIC в жипег… На будущее, типа. В жипег. Ага. Почему не в bmp сразу?
Вот такие сеньоры-помидоры обитают в силиконовой долине, трактористу на заметку.
Какой-то сборник вредных советов "как грохнуть свой домашний архив".
Даже если отвлечься от темы "а что, если я захочу десяток фото распечатать и сделать фотокнигой или календарём на память", никогда, слышите, НИКОГДА не удаляйте исходные файлы автоматом после пакетной обработки.
Один раз из ста что-то пойдёт не так и вы лишитесь всего архива, будет очень обидно. Стирать исходные файлы можно только после того как вы проверили новые и убедились, что с ними всё в порядке.
Второе, почему это плохой совет — не указывается качество JPEG, это верный способ угробить фотографию.
У sips есть параметр
formatOptions [low|normal|high|best|]
который я не ставил бы ниже best (вроде можно и в процентах, тогда >85)
Ещё есть параметр quality, но я не понял, что он значит. Тоже бы ставил в best, возможно, это качество масштабирования.
Ну и третье, напоследок — скрипт, стирающий любые директории без предупреждения и подтверждения, особенно если речь о папке с частым названием new, нельзя писать никогда.
Про ключ -e у echo видимо тоже?
echo -e "\nWill replace originals...\n"
Файл использует camelSpace стиль, но не везде, придерживаться одного стиля не учили в именах переменных? Это является хорошим тоном в программировании. Обработку исключений обрабатывать в shell скриптах не учили? sips? Это же тулза из mac os, для linux кросплатформенности есть imagemagick. Одну и туже команду запускать только ради получения отдельно ширины и высоты не разумно, правильнее положить выполнение команды в переменную, и потом из нее уже извлекать. folder вы серьезно? Термин folder не применим к POSIX системам. Это чисто Windows замута!
Вот мой вариант только может еще рекурсивно обрабатывать директории. И если заменить -resize "${maxWidth}x" на -resize "${maxWidth}@" то можно делать ресайз наибольшей стороны, а не только по ширине.
#!/bin/bash
imgsDirectory="."
destDirectory="./new"
quality=75
maxWidth="2000"
if [ ! -d "${imgsDirectory}" ]; then
echo "Image directory: ${imgsDirectory} not exist!"
exit 1
fi
if [ -d "${destDirectory}" ]; then
rm -rf "${destDirectory}"
fi
# Making directory tree. Making only not empty directories.
mkdir -p "${destDirectory}"
find "${imgsDirectory}" -type d -not -empty | cut -c$((${#imgsDirectory} + 2))- | xargs -I {} mkdir -p "${destDirectory}/{}"
# Image files processing.
IFS=$'\n'
cnt=0
imageFiles=$(find "${imgsDirectory}" -type f -regextype egrep -iregex ".*\.(jpe{0,1}g|heic)$" | cut -c$((${#imgsDirectory} + 2))-)
for image in $imageFiles; do
((cnt++))
imageData=$(magick identify -quiet "${imgsDirectory}/${image}" | grep -ioP -m1 "\w+\s+[0-9]+x[0-9]+" | head -n1)
imageType=$(echo "${imageData}" | cut -f1 -d\ )
imageWidth=$(echo "${imageData}" | cut -f2 -d\ | cut -f1 -dx)
imageHeight=$(echo "${imageData}" | cut -f2 -d\ | cut -f2 -dx)
if [[ -z ${imageWidth} || -z ${imageHeight} ]]; then
echo -e "[${cnt}] Skiping image ${image} - \E[1m\E[31mBROKEN IMAGE\E[0m"
continue
fi
if echo "${imageType}" | grep -iq "heic"; then
imageName=$(echo "${image}" | sed -n "s/.\w*$/.jpg/I;p")
else
imageName=${image}
fi
if [[ "${imageWidth}" -gt "${maxWidth}" && $((imageWidth / imageHeight)) -lt 2 ]]; then
magick "${imgsDirectory}/${image}" -quiet -resize "${maxWidth}x" -quality "${quality}" "${destDirectory}/${imageName}"
touch -r "${imgsDirectory}/${image}" "${destDirectory}/${imageName}"
echo -e "[${cnt}] Resizing Image ${image} \E[1m\E[33m${imageWidth} → ${maxWidth}\E[0m - \E[1m\E[32mSUCCESS\E[0m"
fi
done
# Removing empty directories in destionation. Directories which can be contain bad image files.
find "${destDirectory}" -type d -empty -delete
echo -e "\nReplacing original images...\n"
#rsync -a "${destDirectory}/" "${imgsDirectory}"
rm -rf "${destDirectory}"
# vim:set ts=2 sw=2 et:
Вместо:
magick "${imgsDirectory}/${image}" -quiet -resize "${maxWidth}x" -quality "${quality}" "${destDirectory}/${imageName}"
Надо использовать такую команду:
convert "${imgsDirectory}/${image}" -quiet -resize "${maxWidth}x" pnm:- | \
cjpeg -quality "${quality}" > "${destDirectory}/${imageName}"
12-мегапиксельное фото козы и пакетное изменение размеров файлов на Mac