ImageMagick Отражение - PullRequest
       28

ImageMagick Отражение

5 голосов
/ 14 октября 2008

Коротко:

convert ( -size 585x128 gradient: )  NewImage.png

Как изменить указанную выше команду ImageMagick, чтобы она принимала ширину и высоту от существующего изображения? Мне нужно, чтобы он оставался командой из одной строки.


подробности:

Я пытаюсь программно создать отражение изображения с помощью ImageMagick. Эффект, который я ищу, похож на то, что вы увидите, глядя на объект на краю бассейна с водой. Есть довольно хорошая нить о том, что я пытаюсь сделать здесь , но решение не совсем то, что я ищу. Так как я буду вызывать ImageMagick из приложения на C # .Net, я хочу использовать один вызов без временных файлов и вернуть изображение через стандартный вывод. Пока у меня есть это ...

convert OriginalImage.png  ( OriginalImage.png -flip -blur 3x5 \
    -crop 100%%x30%%+0+0 -negate -evaluate multiply 0.3 \
    -negate  ( -size 585x128 gradient: ) +matte -compose copy_opacity -composite )
    -append NewImage.png

Это работает нормально, но не дает мне точное исчезновение, которое я ищу. Вместо хорошего сплошного затухания сверху вниз, оно дает мне затухание сверху вниз, слева направо. Я добавил раздел (-negate -evaluate multiply 0.3 -negate), чтобы сделать его немного ярче, так как я не получил желаемого затухания. Я также не хочу жестко кодировать размер изображения при создании градиента (-size 585x128 Градиент:). Я также хочу сохранить прозрачность исходного изображения, если это возможно.

Чтобы перейти на стандартный вывод, я планирую заменить «NewImage.png» на «-»

Ответы [ 3 ]

1 голос
/ 15 октября 2008

Если вы звоните из C #, возможно, вам удастся получить размеры изображения в C #. Затем вызовите команду ImageMagick с

command = String.Format("convert bar %1x%2",img.Width,img.Height)
0 голосов
/ 23 апреля 2010

Может быть, это может помочь: Отражение под изображением

#!/bin/sh

gamma=$1
source=$2
destination=$3
size=`identify -format "%wx%h" $source`

convert $source \
  \( -size $size xc:none \
  \( \( -flip $source -crop $size+0+0 \) \
  -size $size gradient: -gamma $gamma \
  -compose copy_opacity -composite \) \
  -compose blend -composite \) \
  -append $destination
0 голосов
/ 19 ноября 2008

Вы должны взять существующее изображение в качестве входных данных и создать градиент самостоятельно, используя -fx вместо псевдо-формата градиента.

...