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

Fucking GD, fucking PNG, fucking alpha channell

  • sap

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

    Spritz 22 июля 2009 г. 9: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 г. 10:00, спустя 2 минуты 33 секунды

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

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

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

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


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

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

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

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

    Spritz 22 июля 2009 г. 10: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 г. 10: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 г. 10:14, спустя 3 минуты 48 секунд

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

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

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


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

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

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

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

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

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

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


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

    Да.
  • phpdude

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

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



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

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

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

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

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

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

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

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

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

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

    http://94.31.169.103/sapgdbugs/

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

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

    Spritz 22 июля 2009 г. 11: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 г. 11:23, спустя 2 минуты 50 секунд

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

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