Imagemagick нежелательный черный фон на повернутых прозрачных изображения - PullRequest
1 голос
/ 14 февраля 2012

У меня есть веб-сайт, который генерирует изображения, похожие на поляроиды, размещенные друг на друге под различными углами До сих пор все работало хорошо, но теперь у меня появился черный фон вокруг моих прозрачных .png.
Вы можете увидеть проблему здесь . Изображения в последнем альбоме все перепутаны.

Я использую imagemagick (6.5.4.7-3.fc12).

мои команды выглядят примерно так:
первый содержится в foreach и генерирует множество png, вращающихся под разными углами
convert '{$sf}' -auto-orient -thumbnail 120x120 -gravity center -bordercolor snow -background black -polaroid {$angle} {$i}.png

вторая команда берет ранее сгенерированные изображения и складывает их вместе
convert '*.png' -background transparent -alpha on -gravity center -layers merge -extent 190x190 +repage -thumbnail 115x115 -gravity center -extent 120x120 'result.png'

Насколько мне удалось отладить, черный фон уже присутствует на изображениях, созданных с помощью первой команды, и они появляются только при повороте изображений. Если я использую только -polaroid 0 вместо +polaroid, то получающиеся изображения в порядке.
Я предполагаю, что проблема не в самом коде, а в том, что ImageMagick или что-то еще было обновлено на моем сервере, и это положило начало всему этому беспорядку.

Я также пробовал все виды комбинаций с настройкой -alpha и всем остальным, что я мог найти в документах imagemagick, которые хоть немного связаны с прозрачностью, но, похоже, ничего не работает.

Ответы [ 3 ]

1 голос
/ 17 февраля 2012

После всех видов тестирования я, наконец, пришел к выводу, что проблема была не в моих convert командах.

Решением моей проблемы была переустановка / обновление ImageMagick.

1 голос
/ 13 апреля 2012

// Он удаляет нежелательный черный / белый фон и делает его прозрачным фоном.

            ImageInfo info1 = new ImageInfo(
            "/opt/apache-tomcat-6.0.18/webapps/newcpclient_branch/upload/sample/ATT00003.jpg");
    MagickImage blankImage = new MagickImage(info1);

    **blankImage.setBackgroundColor(PixelPacket.queryColorDatabase("#FFFF8800"));**

    blankImage = blankImage.rotateImage(250.0);
    blankImage.setFileName("/opt/apache-tomcat-6.0.18/webapps/newcpclient_branch/upload/sample/transparent.png");
    blankImage.writeImage(info1);
0 голосов
/ 14 февраля 2012

В первой строке -background установлено значение 'black'. Это означает, что вы не получаете прозрачность. Работает ли оно, если вы установили «none»?

Edit:

import os
import random as ra

for i in range(10):
    image = 'convert C:/image.png -auto-orient -thumbnail 120x120 -gravity center -bordercolor snow -background none -polaroid '+str(ra.uniform(0,360))+' C:/test/image_polaroid_'+str(i)+'.png'
    os.system(image)

image = 'convert -size 500x500 xc:transparent C:/test/result.png'
os.system(image)

for i in range(10):
    image = 'composite -gravity center C:/test/image_polaroid_'+str(i)+'.png C:/test/result.png C:/test/result.png'
    os.system(image)

Редактировать 2:

import os
import random as ra

for i in range(10):
    image = 'convert C:/image.png -background none -polaroid 0 C:/test/image_polaroid_'+str(i)+'.png'
    os.system(image)
    image = 'mogrify -rotate '+str(ra.randint(0,360))+' -background none C:/test/image_polaroid_'+str(i)+'.png'
    os.system(image)
...