Автоматическое изменение размера для версий изображений "без сетчатки"
Я ищу решение, которое может спасти меня от поддержки двух версий одного и того же изображения, один для дисплеев Retina (aka @2x), один для другого для дисплеев Retina. Моя цель состоит в том, чтобы сохранить только изображения "2x" и иметь какой-то "волшебный инструмент", чтобы изменить их размер одним щелчком мыши или даже лучше при создании в XCode. Как "установить и забыть".
Вы можете мне помочь? Спасибо заранее.
Ответы
Ответ 1
Если вы просто хотите уменьшить их, вы можете заставить Xcode автоматически генерировать все изображения без сетчатки во время процесса сборки. В этом примере script используется "sips", поскольку он предварительно установлен на компьютерах Mac.
Script
#!/bin/bash
# Downsamples all retina [email protected] images.
echo "Downsampling retina images..."
dir=$(pwd)
find "$dir" -name "*@2x.png" | while read image; do
outfile=$(dirname "$image")/$(basename "$image" @2x.png).png
if [ "$image" -nt "$outfile" ]; then
basename "$outfile"
width=$(sips -g "pixelWidth" "$image" | awk 'FNR>1 {print $2}')
height=$(sips -g "pixelHeight" "$image" | awk 'FNR>1 {print $2}')
sips -z $(($height / 2)) $(($width / 2)) "$image" --out "$outfile"
test "$outfile" -nt "$image" || exit 1
fi
done
Автоматическое выполнение
- Создайте новую "Агрегатную цель", назовите ее "Уменьшить количество изображений".
- Добавьте фазу "Запустите script" к этой цели, которая запускает script.
- Добавьте в целевую (ые) целевую (ые) целевую (ые) целевую (ые) целевую страницу "Образцы сэмплов" как "Целевая зависимость".
Примечания
Не забудьте добавить ваши 1x изображения в проект Xcode. В зависимости от ваших потребностей вы также можете:
- исключить определенные файлы из конверсии
- добавить сгенерированные файлы в ваш .gitignore файл
- используйте ImageMagick convert" вместо "sips". (Кажется, что sips не работает для некоторых индексированных PNG.)
- запустить optipng
ImageMagick поставляется с командой compare, если вы хотите проверить версии с пониженной дискретизацией.
Ответ 2
Это довольно старый поток, но я наткнулся на него, поэтому я могу подробно остановиться на сохранении более одного размера.
По производительности, я не уверен, что использование автоматического масштабирования - мудрая идея, поскольку это нужно делать в режиме реального времени, но оно должно работать в более простых случаях.
Теперь, чтобы автоматически преобразовать эти изображения @2x
, простой bash script должен сделать трюк. l4u, но для парней с более простыми потребностями, которые не хотят устанавливать guard
, это также работает (вам все равно нужно установить ImageMagick, хотя):
for f in $(find . -name '*@2x.png'); do
echo "Converting $f..."
convert "$f" -resize '50%' "$(dirname $f)/$(basename -s '@2x.png' $f).png"
done
Ответ 3
Это тривиально:
- В проект включаются только изображения @2x.
- Убедитесь, что эти изображения имеют суффикс @2x.
Система будет автоматически уменьшаться для устройств без сетчатки.
Единственное исключение - если вы делаете ручной рисунок низкого уровня Core Graphics. При необходимости вам нужно настроить масштаб. 99,9%, вам не о чем беспокоиться.
Ответ 4
u может просто использовать только изображения *@2x.png для вашего приложения.
но вы должны установить режим контента = UIViewContentModeAspectfit для изображений,
то он автоматически исправит изображение для соответствующих представлений.
Ответ 5
Или вы также можете сделать следующее: иметь только изображения @2x в вашем приложении, а затем при первом запуске. Возьмите все фотографии @2x и уменьшите их на 1/2 и сохраните их в каталоге документов. Затем, когда вам нужны ваши фотографии для UIImageView, просто возьмите их за каталог документов и установите его в свой UIImageView , используя код, а не Interface Builder!
Мне было интересно это несколько недель назад, и я понял, что это практически единственный способ действительно сделать то, что вы ищете!
Ответ 6
Я создал http://l4u.github.com/blog/2012/04/02/resizing-retina-images-with-guard-for-cocos2d-iphone-slash-cocos2d-x/, чтобы генерировать не-hd-изображения на лету, когда -hd-изображения создаются/обновляются. Он использует охрану, защитную оболочку и imagemagick
Вы можете заменить -hd на @2x.
Ответ 7
Попробуйте помощник по ресурсам в Mac App Store
http://itunes.apple.com/us/app/resourcehelper/id521474600
Это стоит $10,49, но это того стоит. Проверяет, являются ли ваши изображения дружелюбными к сетчатке (т.е. Даже пронумерованы размеры ширины/высоты) и создает соответствующий встроенный образ. Также обрабатывает создание графики ~ ipad и @2x ~ ipad по мере необходимости.
EDIT: Я не являюсь аффилированным лицом авторов Resource Helper.
Ответ 8
То, что я делал для наших приложений, просило нашего дизайнера экспортировать все в два раза больше, чем нужно, а затем немного node script для изменения размеров изображений (все, что называется @2x в каталоге, где вы запустите script). В настоящее время мы просто запускаем script, когда каждый раз, когда мы развертываем (это idempotent), но его можно легко включить в forever -w или какую-нибудь другую библиотеку смены файлов, такую как guard.
Ответ 9
Старый поток, но я нашел использование для @nschum script - я заметил, что он не округляет числа для изображений @1x, если он делит нечетное число. Если я правильно помню, это приводит к поражению производительности; немного изменив его, как показано ниже. Несколько раз изменяет awk-вызов, чтобы выполнить разделение там и вокруг него, и не будет повторно создавать изображения @1x, если они уже существуют (вы можете удалить это, dunno).
На данный момент мы в значительной степени поразили точку, где не-сетчатка не имеет большого значения (iPad 2 - это все, что осталось...? Оригинальный Mini тоже, я думаю), так что meh. Бросать его на потомство.
#!/bin/bash
# Downsamples all retina [email protected] images.
dir=$(pwd)
echo "Downsampling Retina images..."
find "$dir" -name "*@2x.png" | while read image; do
outfile=$(dirname "$image")/$(basename "$image" @2x.png).png
if [ "$image" -nt "$outfile" ] && [ ! -f "$outfile" ]; then
if [[ $(dirname "$image") =~ "Images.xcassets" ]]; then
echo "Skipping Image XCode Assets directory"
else
basename "$outfile"
width=$(sips -g "pixelWidth" "$image" | awk 'FNR>1 {printf "%.0f\n", $2/2}')
height=$(sips -g "pixelHeight" "$image" | awk 'FNR>1 {printf "%.0f\n", $2/2}')
sips -z "$height" "$width" "$image" --out "$outfile"
test "$outfile" -nt "$image" || exit 1
fi
fi
done
echo "Finished downsampling Retina images"