1つの画像から数百の解像度を生成


8

複数の解像度の単一の画像が必要なプロジェクトに取り組んでいます。幸運なことに画像は同じ幅/高さの解像度であり、同じ高さと幅のすべての解像度でうまく機能します。つまり、80x80px 100x100pxなどです。

もちろん、Adobe Photoshopでこれを手動で行うこともできますが、文字通り73pxから1000pxまでの何百もの異なる解像度が必要であり、これには手間のかかる時間がかかります。私はネットを検索しましたが、引き続き取得しているのは、サムネイルジェネレーターまたはAdobe Photoshopバッチセーバーだけで、かなりの時間がかかります。

それで、私の質問に私を導きます、WindowsまたはLinuxのいずれかで、単一の画像から何百もの解像度を可能な限り迅速に作成するにはどうすればよいですか?


1)画像のサイズを動的に変更するImgIxのようなCDNがあります。2)小さい動物のThumbNailer($ 15)を使用して、画像をバッチ処理しました。設定した「プロファイル」をコマンドラインから実行して、コマンドラインから呼び出すだけです。解像度ごとに、個別のプロファイルが必要になります。画像は1:1で、「インテリジェント」なサイズ変更オプションは必要ないので、ImageMagickで十分だと思います。

代わりに単一のベクター画像を使用できますか?
Anonsage

2
何百もの同じ画像を異なるサイズで必要とするプロジェクトに興味があります。それは答えには関係ありませんが、それでも私は興味があります。

2
あなたはSUREあなたは非常に多くの解像度で画像を必要としますか?もう一度、もっと注意深く考えてください。他の人とそれについて話し合います。私はこれが実際にそうであるどこかにエッジケースがあることを除外することはできませんが、私が賭けなければならなかった場合、私は「あなたはそれを間違っている」ことに賭けます。
o0 '。

@Lohroisはあなたの権利であり、すべてを必要とするわけではありませんが、合計30mb(1000png)のために、使用されていないPNGにとっては大きな問題ではありません。
Simon Hayter、2015

回答:


19

ソース画像をもとにたくさんの画像を作りたい!

もちろん、Adobe Photoshopでこれを手動で行うこともできます。これには、手間のかかる時間がかかります。

あなたはとても正しいです。コンピューターに簡単で繰り返し作業をさせましょう。それが彼らの得意分野です。トムRUHの答えのメモは、使用することができますImageMagick。このため。

ただし、問題があります。

幸運なことに、画像は4:3の解像度であり、高さと幅が同じすべての解像度、つまり80x80px 100x100pxなどでうまく機能します

(強調鉱山)

どの解像度が必要かは明確ではありません-述べられているとおり4:3、または暗黙的に1:1。

ただし、最小73px最大1000pxの要件と数百の解像度に基づいています。いくつかの変数を変更することで設定できるほとんどの可能性(希望するオフチャンスでの液体のサイズ変更を含む)をカバーする小さなスクリプトを作成しました。

スクリプト、ペーストビンから簡単にコピーできます:

#!/bin/bash
# resizer.sh - resize target image between two resolutions
# accepts file as either first argument or by setting FILEPATH variable

# SETTINGS

SMALLEST_WIDTH=73   # px
LARGEST_WIDTH=1000  # px
FILEPATH=           # set if you don't want to pass in image as argument
NUM_OF_RESOLUTIONS=100      # number of images generated; will generate between
                    # $SMALLEST_WIDTH and $LARGEST_WIDTH
RATIO=                      # set if you want to specify width/height
                    # (eg 1/1, 4/3, 16/9), blank is preserve current ratio


# NOTE: resizing to other aspect ratios may be slow/distorty:
# as per http://www.imagemagick.org/Usage/resize/#noaspect
# Seamless resizing (default) may be preferred, see:
# http://www.imagemagick.org/Usage/resize/#liquid-rescale
# but note it is slower, particularly as images get larger

LIQUID=0

# SCRIPT BELOW
# silent by default; uncomment "printf" lines for a description of what is happening
die() { printf "$@\n" 1>&2 ; exit 1; }

if [ -z "$FILEPATH" ]; then
    if [ -z "$1" ]; then die "Need to supply file to work on either as argument or by setting FILEPATH!";
    else FILE="$1";
    fi
else
    FILE="$FILEPATH"
fi

# check file exists and is regular file

if [ ! -e "$FILE" ]; then die "$FILE does not exist!"; fi
if [ ! -f "$FILE" ]; then die "$FILE is not a regular file!"; fi

i=0
step=$(echo "($LARGEST_WIDTH - $SMALLEST_WIDTH) / ($NUM_OF_RESOLUTIONS - 1)" | bc -l)
#printf "Resolution step is: %s\n-------------" "$step"
while [ $i -lt $NUM_OF_RESOLUTIONS ]; do
    # handle ratio
    WIDTH=$(echo "$SMALLEST_WIDTH+($step*$i)" | bc -l)
    if [ -z "$RATIO" ]; then
            #printf "convert %s -resize %s %s\n" "$FILE" "$WIDTH" "${FILE%.*}-${WIDTH%.*}px.${FILE##*.}"
            convert "$FILE" -resize "$WIDTH" "${FILE%.*}-${WIDTH%.*}px.${FILE##*.}"
    else
            HEIGHT=$(echo "$WIDTH * $RATIO" | bc -l)
            if [ "$LIQUID" -eq 0 ]; then
                    # Uncomment convert line for distorted ("squashed") resizing
                    #printf "convert %s -resize %sx%s\! %s\n" "$FILE" "$WIDTH" "$HEIGHT" "${FILE%.*}-${WIDTH%.*}px.${FILE##*.}"
                    convert "$FILE" -resize "$WIDTH"x"$HEIGHT"\! "${FILE%.*}-${WIDTH%.*}px.${FILE##*.}"
            else
                    # Liquid resizing: http://www.imagemagick.org/Usage/resize/#liquid-rescale
                    # fast aspect ration resize first, then liquid
                    #printf "convert %s -resize %s %s\n" "$FILE" "$WIDTH" "${FILE%.*}-${WIDTH%.*}px.${FILE##*.}"
                    convert "$FILE" -resize "$WIDTH" "${FILE%.*}-${WIDTH%.*}px.${FILE##*.}"
                    #printf "%s details are now:\n %s\n" "${FILE%.*}-${WIDTH%.*}px.${FILE##*.}" "$(identify "${FILE%.*}-${WIDTH%.*}px.${FILE##*.}")"
                    #printf "convert %s -liquid-rescale %sx%s\! %s\n" "${FILE%.*}-${WIDTH%.*}px.${FILE##*.}" "$WIDTH" "$HEIGHT" "${FILE%.*}-${WIDTH%.*}px.${FILE##*.}"
                    convert "${FILE%.*}-${WIDTH%.*}px.${FILE##*.}" -liquid-rescale "$WIDTH"x"$HEIGHT"\! "${FILE%.*}-${WIDTH%.*}px.${FILE##*.}"
            fi
    fi
    (( i++ ))
done

注:値などを計算するためのサブシェルのビットオーバーザトップですが、ちょっと。前述のように、printf何が起こっているのかを理解するために、これらの行のコメントを外すことができます。そうでない場合は、沈黙規則に従ってデフォルトで黙って動作します。一部の画像は、計算されたとおりの寸法ではありません(例:193px対138.54545454545454545452px)。小数のピクセルを使用することができないためです。


1
すごい!テストしただけで問題なく動作しましたが、残念なことに、これは1、2、3、4などでは計算を行わずに、または画像を検査することなく解像度を通知しないため、ファイルラベルの新しい問題が発生します。私は、ファイル名、すなわちにアペンド解像度にスクリプトを適応させることができます方法を知って起こるのかfilename-500x500.pngではなくfilename-1.png
サイモン・ヘイター

それがあなたの多かれ少なかれ満足のいくように機能してうれしいです。明確にしていただきありがとうございます。よりわかりやすいファイル名で回答を更新します。思いfilename-width.pngで十分?モードの1つ(元のアスペクト比を維持)は、明示的な高さを直接計算しません。(を介してidentify)情報を簡単に取得できますが、元のアスペクト比の場合、画像ごとの追加の呼び出しを節約できます。
bertieb

すごい、迅速な対応ありがとうございます!ええ、私は自動で高さに同じ数を仮定するので、幅は仕事をします。
Simon Hayter、2015

私は4でどのような意味のに関しては:3であったアスペクト比はテレビやモニター、スクエアな場所で見つかる...つまりgoogle.co.uk/...ないレターボックス16:9など
サイモン・ヘイター

1
私はそれをダウンロードする必要があります、ありがとう!聞いて!...あなたの伝説、スクリプトは素晴らしく機能します!たくさんのご協力ありがとうございます。
Simon Hayter、2015

7

コマンドラインを処理し、簡単なBASHスクリプトを記述できる限り。あなたはImageMagickを使うことができます


1
解像度が4:3のアスペクト比である場合、4ピクセル幅であれば、さらに3倍になります。また、80x80または100x100の解像度は、アスペクト比が1:1です。4:3の比率から1:1の比率に変更するため、画像を引き伸ばすか、余分なピクセルをトリミングする必要があります。それが重要かどうかはわかりませんが、4:3の解像度を維持してこれを回避できませんか?
ゲルタ

1
解決策が可能であることを知って安心しますが、これはそれを達成する方法には答えません。例やいくつかの指示で答えを広げることができますか?ありがとう。
fixer1234 2015

1)ImageMagicの一部であるconvert.exeを-resizeオプションで使用
Sun
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.