Консолидация команды ImageMagick?

#linux #image-processing #imagemagick

#linux #обработка изображений #imagemagick

Вопрос:

Я ищу способ объединить мои командные строки imagemagick и исправить отклонения, чтобы получить желаемый эффект, который представляет собой график на фоне изображения.

Вы можете увидеть файлы изображений здесь — я думаю, что их встраивание сюда приведет к беспорядку в макете в stack overflow.

Первое изображение, которое вы можете увидеть, — это исходный график. 2-е и 3-е изображения — это то, что я бы посчитал неудачами, потому что в:

2 Фон обрезается в результате попытки добиться правильного соответствия размеров фона и графика.

3 там, где я не добавил черный фон, вы можете видеть, что у текста нет фона

4-е изображение — это фон, который я использовал в примерах.

То, к чему я стремлюсь, — это график с фоном, масштабируемым по размеру, но не растянутым или сжатым по размеру. Фоновый файл всегда будет иметь большие размеры, чем график.

Ниже приведен сценарий, который я создал, чтобы получить примеры с некоторыми примечаниями, объясняющими, что делать.

По сути, мне нужно масштабировать фоновое изображение до тех пор, пока оно не заполнит размер графика, обрезать излишки.

Кто-нибудь помогает?

 
#!/bin/bash

if [ -z "$3" ]
then
    echo "usage: $0 background.png foreground.png output.png"
    exit 1
fi


orig_size=`identify -format '%wx%h' "$2"`
bg_size=`identify -format '%wx%h' "$1"`


# make a black background size of graph
convert -size $orig_size xc:black ./thisblack.png

# resize background image to size of graph
# this might result in areas with no background
convert -resize $orig_size "$1" "_$1"

# make the graph the background to force size
# by merging the graph and resized background.
# By using the graph as first parameter the size
# is always correct (even though you can't see
# the graph in this image)
convert -composite "$2" "_$1" -depth 8 "_$3"

# overlay graph onto the composite background and graph
# so we can see the graph again
convert -size $orig_size -composite "_$3" "$2" -depth 8 "__$3"

# merge the black and final graph for end image and fill 
# areas with no background with black.
convert -composite "thisblack.png" "__$3" -depth 8 "$3"

# Clean up
rm -f "__$3"
rm -f "_$3"
rm -f "_$1"
rm -f thisblack.png

 

Ответ №1:

Если я правильно понял, вы хотите заполнить исходное изображение фоном наименьшего размера и вырезать расширяющиеся области. Вы можете добиться этого, используя -resize ^ опцию with и -extent :

 convert background.jpg -resize 100x100^ -extent 100x100 background_resize.jpg
 

http://www.imagemagick.org/Usage/resize/#fill