从单个图像生成数百种分辨率

Sim*_*ter 8 resolution adobe-photoshop image-processing

我正在处理一个需要多种分辨率的单个图像的项目。幸运的是,图像具有相同的宽度/高度分辨率,并且适用于具有相同高度和宽度的所有分辨率,即 80x80px 100x100px 等。

显然我可以在 Adob​​e Photoshop 中手动完成此操作,但我确实需要从 73px 一直到 1000px 的数百种不同的分辨率,这将花费大量的手动时间。我在网上搜索过,我得到的只是缩略图生成器或 Adob​​e Photoshop 批处理保护程序,这仍然需要相当长的时间。

所以,这让我想到了我的问题,如何在 Windows 或 Linux 中尽快从单个图像创建数百个分辨率。

ber*_*ieb 19

我想根据源图像制作大量图像!

显然,我可以在 Adob​​e Photoshop 中手动完成此操作……而这将花费大量的手动时间。

你说得很对。让电脑做简单的重复性工作;这就是他们擅长的。正如Tom Ruh 的回答所指出的,您可以使用ImageMagick它。

但是,有一个问题:

幸运的是,图像的分辨率为4:3,并且适用于具有相同高度和宽度的所有分辨率,即80x80px 100x100px等。

(强调我的)

目前尚不清楚您想要什么分辨率 - 所述的 4:3,或暗示的 1:1。

但是,根据您对最小 73px最大1000px以及数百个分辨率的要求;我写了一个小脚本,它应该涵盖大多数可能性(包括在你喜欢的情况下调整液体大小),可以通过更改一些变量来设置。

脚本,也可以从这里的 pastebin 获得,以便于复制

#!/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
Run Code Online (Sandbox Code Playgroud)

注释:在用于计算值等的子外壳上有点过分,但是嘿嘿。如前所述,printf可以取消注释行以了解正在发生的事情,否则默认情况下它将按照沉默规则静默运行。某些图像的尺寸不会与计算出的完全相同(例如 193 像素与 138.54545454545454545452 像素),因为您无法以有用的方式使用小数像素。


Tom*_*Ruh 7

只要你能处理一些命令行并编写一些简单的 BASH 脚本。您可以使用ImageMagick