ФорумПрограммированиеPHP для идиотовРасширения PHP → Fucking GD, fucking PNG, fucking alpha channell

Fucking GD, fucking PNG, fucking alpha channell

  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 22 июля 2009 г. 20:58

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



    Почему через прозрачность не видно фонового изображения и как сделать, чтобы было видно?

    Сама функция:

    function joinImages($background, $emblem)
    {
    $bg_info = getimagesize($background);

    $e_info = getimagesize($emblem);

    $prop = 6;

    $e_width = $bg_info[0] / $prop;

    $e_height = $bg_info[1] / $prop;

    $image = imagecreatefrompng($emblem);

    imagealphablending($image, false);
    imageSaveAlpha($image, true);

    $width = imagesx($image);
    $height = imagesy($image);

    if ($width > $e_width)
    $x_pr = $e_width / $width;
    else
    $x_pr = 1;

    if ($height > $e_height)
    $y_pr = $e_height / $height;
    else
    $y_pr = 1;

    if ($x_pr <= $y_pr)
    $pr = $x_pr;
    else
    $pr = $y_pr;

    $new_width = ceil($width * $pr);
    $new_height = ceil($height * $pr);

    $new_image = imageCreateTrueColor($new_width, $new_height);

    imagealphablending($new_image, false);
    imageSaveAlpha($new_image, true);

    imageCopyResampled($new_image, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

    imagedestroy($image);

    $x_coordinate = ($bg_info[0] / 2) - ($new_width) / 2;

    $y_shift = 1.07;

    $y_coordinate = (($bg_info[1] / 2) - ($new_height / 2)) / $y_shift;

    $bg_image = imagecreatefrompng($background);

    imagealphablending($bg_image, false);
    imageSaveAlpha($bg_image, true);

    //imageCopyResampled($bg_image, $new_image, $x_coordinate, $y_coordinate, 0, 0, $new_width, $new_height, $new_width, $new_height);

    //imagecopymerge($bg_image, $new_image, $x_coordinate, $y_coordinate, 0, 0, $new_width, $new_height, 0);

    imagecopy($bg_image, $new_image, $x_coordinate, $y_coordinate, 0, 0, $new_width, $new_height);

    header("Content-type: image/png");

    imagepng($bg_image);

    exit;
    }


    Сам получившийся PNG прикладываю.
    1. fuck.png (179)
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 22 июля 2009 г. 21:00, спустя 2 минуты 33 секунды

    при этом ресайзить эмблему

    с ресайзом пнг у мя тоже когдато был трабла…
    в ф-ии есть решение
    http://pyha.ru/forum/topic/641.0
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 22 июля 2009 г. 21:06, спустя 5 минут 29 секунд


    при этом ресайзить эмблему

    с ресайзом пнг у мя тоже когдато был трабла…
    в ф-ии есть решение
    http://pyha.ru/forum/topic/641.0

    Да как раз с ресайзом траблы нет, если вывести отресайзенные части, прозрачность есть. Трабла в наложении :(
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 22 июля 2009 г. 21:08, спустя 1 минуту 51 секунду

    тем не менее онотоле обдобряе так :
    <?php
    elseif ($info[2] == IMAGETYPE_PNG)
    {

    imagealphablending($image_resized, false);


    $color = imagecolorallocatealpha($image_resized, 0, 0, 0, 127);


    imagefill($image_resized, 0, 0, $color);


    imagesavealpha($image_resized, true);
    }
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 22 июля 2009 г. 21:10, спустя 2 минуты 49 секунд


    тем не менее онотоле обдобряе так :
    <?php
    elseif ($info[2] == IMAGETYPE_PNG)
    {

    imagealphablending($image_resized, false);


    $color = imagecolorallocatealpha($image_resized, 0, 0, 0, 127);


    imagefill($image_resized, 0, 0, $color);


    imagesavealpha($image_resized, true);
    }


    Сейчас попробуем, раз онотоле одобряе)
    Спустя 92 сек.
    Тот же результат :(
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 22 июля 2009 г. 21:14, спустя 3 минуты 48 секунд

    на имагике не пробовал? я думаю у него апи куда посерьезнее реализованы нежели в либгд. к тому же и памяти оно жрет в разы меньше
    Сапожник без сапог
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 22 июля 2009 г. 21:16, спустя 1 минуту 28 секунд


    на имагике не пробовал? я думаю у него апи куда посерьезнее реализованы нежели в либгд. к тому же и памяти оно жрет в разы меньше

    Нету имагика :(
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 22 июля 2009 г. 21:18, спустя 2 минуты 6 секунд

    ты применил этод метод к обоим картинкам ?
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 22 июля 2009 г. 21:19, спустя 1 минуту 4 секунды


    ты применил этод метод к обоим картинкам ?

    Да.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 22 июля 2009 г. 21:19, спустя 5 секунд



    на имагике не пробовал? я думаю у него апи куда посерьезнее реализованы нежели в либгд. к тому же и памяти оно жрет в разы меньше

    Нету имагика :(
    ты шутишь?)) не проще ли установить его и в 2 строчки решить проблему нежели ебаться с гд багами?)))
    Сапожник без сапог
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 22 июля 2009 г. 21:22, спустя 2 минуты 57 секунд

    sap, а попробуй накладывать пнгшку методом класса вотермарк http://pyha.ru/forum/topic/3060.new#new
    Спустя 23 сек.
    phpdude, это не баги гд
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 22 июля 2009 г. 21:49, спустя 27 минут 29 секунд

    NRG, если сохраняю две промежуточные картинки, и склеиваю твоим классом, то работает. Очевидно, фишка в том, что у тебя бекграунд это джпег, а не пнг. Сейчас буду пробовать.
    Спустя 19 сек.
    Или в том, что ты сохраняешь, как джпег.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 22 июля 2009 г. 22:18, спустя 28 минут 42 секунды

    http://94.31.169.103/sapgdbugs/

    кури сап =))) Имаик рулит
    Сапожник без сапог
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 22 июля 2009 г. 22:20, спустя 2 минуты 2 секунды


    http://94.31.169.103/sapgdbugs/

    кури сап =))) Имаик рулит

    Catchable fatal error: Argument 1 passed to Imagick::annotateimage() must be an instance of ImagickDraw, string given in /www/sapgdbugs/index.php on line 16

    NRG, спасибо, сделал с помощью твоего класса :)
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 22 июля 2009 г. 22:23, спустя 2 минуты 50 секунд

    sap, обнови картинку
    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!