Подтвердить что ты не робот

Автоматическое изменение размера для версий изображений "без сетчатки"

Я ищу решение, которое может спасти меня от поддержки двух версий одного и того же изображения, один для дисплеев Retina (aka @2x), один для другого для дисплеев Retina. Моя цель состоит в том, чтобы сохранить только изображения "2x" и иметь какой-то "волшебный инструмент", чтобы изменить их размер одним щелчком мыши или даже лучше при создании в XCode. Как "установить и забыть".

Вы можете мне помочь? Спасибо заранее.

4b9b3361

Ответ 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!

Мне было интересно это несколько недель назад, и я понял, что это практически единственный способ действительно сделать то, что вы ищете!

Ответ 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"