Arhn - архитектура программирования

Прозрачность изображения и альфа-канал при объединении изображений с помощью PHP

Поэтому я нашел некоторый код в PHP Doc и немного отредактировал его, чтобы объединить два изображения, которые у меня есть. Затем изображение сохраняется в папке на сервере. Однако есть небольшая проблема, и я не могу понять, почему это происходит.

Во-первых, мой код:

 $glassurl = $_GET['GlassImg'];
    $frameurl = $_GET['FrameImg'];
    $filename = (int)date("H:i:s");

    $src = imagecreatefromgif($frameurl);
    $dest = imagecreatefromjpeg($glassurl);

    imagecolortransparent($src, imagecolorat($src, 0, 0));

    imagealphablending($dest, false);
    imagesavealpha($dest, true);
    imagealphablending($src, false);
    imagesavealpha($src, true);

    $src_x = imagesx($src);
    $src_y = imagesy($src);
    imagecopymerge($dest, $src, 0, 0, 0, 0, $src_x, $src_y, 100);

    // Output and free from memory
    imagepng($dest, 'uploads/imagetest.png');
    imagegif($dest);

    imagedestroy($dest);
    imagedestroy($src

);

Во-вторых, немного информации об изображениях:

  1. Оба изображения абсолютно одинакового размера
  2. Изображение «шаблон» - это просто цвет блока/шаблон
  3. Изображение кадра имеет прозрачные части внутри кадра (чтобы узор был виден)
  4. Область вокруг рамки окрашена в белый цвет, чтобы убрать лишний рисунок.

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

Для иллюстрации я предоставил изображения. и что происходит.

Шаблон:

шаблон

Рамка:

frame

Результат:

результат

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


Ответы:


1

Обратите внимание, что ваша рамка имеет белые края, и если вы хотите, чтобы окна были белыми, вам нужно обрезать ее и удалить imagecolortransparent, добавленный ниже, если нет, вы можете использовать это

$imgl = "thumb/pattern.png";
$img2 = "thumb/frame.png";

$dest = imagecreatefrompng($imgl);
$src = imagecreatefrompng($img2);
imagecolortransparent($src, imagecolorat($src, 0, 0));

$src_x = imagesx($src);
$src_y = imagesy($src);
imagecopymerge($dest, $src, 0, 0, 0, 0, $src_x, $src_y, 100);

// Output and free from memory
header('Content-Type: image/png');
imagegif($dest);

imagedestroy($dest);
imagedestroy($src);

Вывод

введите здесь описание изображения


Вы также можете иметь

$imgl = "thumb/pattern.png";
$img2 = "thumb/frame.png";

$dest = imagecreatefrompng($imgl);
$src = imagecreatefrompng($img2);

$src_x = imagesx($src);
$src_y = imagesy($src);

$srcNew = imagecreatetruecolor($src_x, $src_y);
ImageColorTransparent($srcNew, imageColorAllocate($srcNew, 0, 0, 0));
imagecopy($srcNew, $src, 70, 50, 78, 60, 473, 293);
imagecopymerge($dest, $srcNew, 0, 0, 0, 0, $src_x, $src_y, 100);

header('Content-Type: image/png');
imagegif($dest);

imagedestroy($dest);
imagedestroy($src);

Вывод

введите здесь описание изображения

22.10.2012
  • Еще раз спасибо за вашу помощь, но, и я, может быть, туплю, но что здесь изменилось? я не вижу 22.10.2012
  • имеет ли значение, что одно из моих изображений в формате gif, а другое в формате jpeg? Отлично имитировал ваш код, и я не могу вывести прозрачный центр, как вы. Это потому, что при сохранении прозрачность превращается в белую? 22.10.2012
  • На самом деле я сохранил оба ваших изображения в формате png .. но это не имеет значения .. он все равно должен работать .... не просто дал вам код .. я проверил его сам ... просто запустите мой код так, как он есть .. вы бы видели, что я говорю 22.10.2012
  • отлично, это то, что мне нужно (у) 07.12.2014

  • 2

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

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

    22.10.2012
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..