Черный фон при использовании imagecopy PHP

12
D
На сайте с 28.06.2008
Offline
1104
858

Нужно объединить изображения из массива в 2 колонки а дальше вниз сколько их там будет.

вроде все сделал, но блин при склеивании получается черный фон. Методом тыка установил что фон добавляет   imagecopy. 

Как можно это победить?

                    //определяем максимальные размеры ширины и высоты для составного фото
                    $imgWidthMax = 0;
                    $imgHeightMax = 0;
                    foreach ($imageArr as $imgSize) {
                        $src = imagecreatefrompng($imgSize);
                        $cropped2 = imagecropauto($src, IMG_CROP_WHITE);
                        if ($cropped2 !== false) {
                            imagedestroy($src);
                            $src = $cropped2;
                        }
                        imagepng($src, $dir . 'test.png');
                        $size = getimagesize($dir . 'test.png');
                        if ($size[0] > $imgWidthMax) {
                            $imgWidthMax = $size[0];
                        }
                        if ($size[1] > $imgHeightMax) {
                            $imgHeightMax = $size[1];
                        }
                    }
                    //нужная ширина и длина изображения
                    $imgWidth = $imgWidthMax;
                    $imgHeight = $imgHeightMax;
                    //колонки и ряды в скринлисте (кол-во images должно быть <= $rows*$cols)
                    $rows = 2;
                    $cols = ceil(count($imageArr) / 2);
                    //итоговая ширина-длина скринлиста
                    $bgWidth = $imgWidth * $cols;
                    $bgHeight = $imgHeight * $rows;
                    //создаём пустой скринлист нужного размера
                    $im = imagecreatetruecolor($bgWidth, $bgHeight);
                    //делаем подложку белой
                    $white = imagecolorallocate($im, 255, 255, 255);
                    imagefill($im, 0, 0, $white);
                    $f = 0; //первое изображение в images
                    //последовательно обрабатываем каждый ряд скринлиста, вставляя в нужном месте изображение
                    for ($j = 0; $j < $cols; $j++) {
                        for ($i = 0; $i < $rows; $i++) {
                            $src = imagecreatefrompng($imageArr[$f]);
                            //Обрезаем у каждого изображения белые края
                            $cropped2 = imagecropauto($src, IMG_CROP_WHITE);
                            if ($cropped2 !== false) { // в случае возврата нового объекта изображения
                                imagedestroy($src);    // мы уничтожаем исходное изображение
                                $src = $cropped2;       // и назначаем обрезанное изображение в $im
                            }
                            imagecopy($im, $src, $j * $imgWidth, $i * $imgHeight, 0, 0, $imgWidth, $imgHeight);
                            $f++; //следующее изображение в images
                        }
                    }

                    imagepng($im, $dir . $numModel . '.png');
                    imagedestroy($im);
                    imagedestroy($src);
                


lutskboy
На сайте с 22.11.2013
Offline
177
#1
                imageAlphaBlending($dst_r, false);
                imageSaveAlpha($dst_r, true);

вместо $dst_r

свое

D
На сайте с 28.06.2008
Offline
1104
#2
lutskboy #:
                imageAlphaBlending($dst_r, false);
                imageSaveAlpha($dst_r, true);

Попробовал вставить эти две строки перед 

imagepng($im, $dir . $numModel . '.png');

потом перед

imagecopy

толку нет

D
На сайте с 28.06.2008
Offline
1104
#3

Часа 4 убил ища решение, вот оно

вместо imagecopy использовать 

imagecopymerge($im, $src, $j * $imgWidth, $i * $imgHeight, 0, 0, imagesx($src), imagesy($src), 100);

ключевое тут

 imagesx($src), imagesy($src)
W1
На сайте с 22.01.2021
Offline
305
#4
А зачем всё это надо?
Мой форум - https://webinfo.guru –Там я всегда на связи
lutskboy
На сайте с 22.11.2013
Offline
177
#5
webinfo #:
А зачем всё это надо?

как зачем? скринлист. я делал такое для порно сайта. но у меня код намного проще

S
На сайте с 13.10.2014
Offline
171
#6

см пример на php.net

$png = imagecreatetruecolor(800, 600);
    imagesavealpha($png, true);

    $trans_colour = imagecolorallocatealpha($png, 0, 0, 0, 127);
    imagefill($png, 0, 0, $trans_colour);
  
    $red = imagecolorallocate($png, 255, 0, 0);
    imagefilledellipse($png, 400, 300, 400, 300, $red);
  
    header("Content-type: image/png");
    imagepng($png);

ключевое слово

imagecolorallocatealpha
D
На сайте с 28.06.2008
Offline
1104
#7
Пробовал я 
imagecolorallocatealpha
не помогло 
W1
На сайте с 22.01.2021
Offline
305
#8
lutskboy #:
как зачем? скринлист. я делал такое

Я не про то, что это кому-то для чего-то нужно. Ясен пень, что если функция существует, то она кому-то нужна. И не только для скринлиста, а и для многих других вещей. У меня был вопрос к ТС, зачем конкретно ему это нужно.

D
На сайте с 28.06.2008
Offline
1104
#9
Зачем убирать черные полоски которые уродуют весь скринлист? Ну даже не знаю как на это ответить...
LEOnidUKG
На сайте с 25.11.2006
Offline
1745
#10
Картинки покажи, с которыми ты работаешь. Есть ощущение, что где-то там JPG или какой-то корявый PNG.
✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий