За последние 24 часа нас посетил 20781 программист и 1714 роботов. Сейчас ищут 1544 программиста ...

Фон изображения при загрузке чернеет

Тема в разделе "Обработка изображений средствами PHP", создана пользователем igramnet, 10 окт 2016.

Метки:
  1. igramnet

    igramnet Активный пользователь

    С нами с:
    16 дек 2013
    Сообщения:
    17
    Симпатии:
    0
    Добрый день. Помогите найти ошибку.

    Имеется PHP код

    PHP:
    1. function ResizeImage($image_from, $image_to, $pixels = 1, $scale = 1, $quality = 90) {
    2. if($pixels == 0) $pixels = 100;
    3. $h = $os = $originalsize = getimagesize ( $image_from );
    4.  
    5. if ($originalsize [0] > $pixels or $originalsize [1] > $pixels) {
    6.     switch ($scale) {
    7.         // по высоте
    8.         case 1 :
    9.             $fitheight = $pixels;
    10.             $fitwidth = $h [0] * $fitheight / $h [1];
    11.             break;
    12.         // по ширине
    13.         case 2 :
    14.             $fitwidth = $pixels;
    15.             $fitheight = $h [1] * $fitwidth / $h [0];
    16.             break;
    17.         // по наибольшей стороне
    18.         case 3 :
    19.             if (($h [0]) > ($h [1])) {
    20.                 $fitwidth = $pixels;
    21.                 $fitheight = $h [1] * $fitwidth / $h [0];
    22.  
    23.             } else {
    24.                 $fitheight = $pixels;
    25.                 $fitwidth = $h [0] * $fitheight / $h [1];
    26.  
    27.             }
    28.             break;
    29.     }
    30.     if ($os [2] == 2 or ($os [2] >= 9 AND $os [2] <= 12))
    31.         $i = ImageCreateFromJPEG ( $image_from );
    32.     if ($os [2] == 3)
    33.         $i = ImageCreateFromPng ( $image_from );
    34.     if ($os [2] == 1)
    35.         $i = ImageCreateFromGif ( $image_from );
    36.  
    37.     $o = ImageCreateTrueColor ( $fitwidth, $fitheight );
    38.     if ($os [2] == 3) {
    39.         imagealphablending( $o, false);
    40.         imagesavealpha( $o, true);
    41.     }
    42.     imagefilledrectangle($o, 0, 0, $fitwidth, $fitheight, imagecolorallocate($o, 255, 255, 255));
    43.     imagecopyresampled ( $o, $i, 0, 0, 0, 0, $fitwidth, $fitheight, $h [0], $h [1] );
    44.     imagejpeg ( $o, $image_to, $quality );
    45.     chmod ( $image_to, 0777 );
    46.  
    47.     imagedestroy ( $o );
    48.     imagedestroy ( $i );
    49.     return 2;
    50. }
    51. if ($originalsize [0] <= $pixels AND $originalsize [1] <= $pixels) {
    52.     if ($os [2] == 2 or ($os [2] >= 9 AND $os [2] <= 12))
    53.         $i = ImageCreateFromJPEG ( $image_from );
    54.     if ($os [2] == 3)
    55.         $i = ImageCreateFromPng ( $image_from );
    56.     if ($os [2] == 1)
    57.         $i = ImageCreateFromGif ( $image_from );
    58.  
    59.     if ($os [2] == 3) {
    60.         imagealphablending( $i, false);
    61.         imagesavealpha( $i, true);
    62.     }
    63.     imagejpeg ( $i, $image_to, $quality );
    64.     chmod ( $image_to, 0777 );
    65.     return 1;
    66. }
    67. }
    При загрузке изображения PNG фон чернеет.

    Код (Text):
    1.         imagealphablending( $i,false);
    2.         imagesavealpha( $i,true);
    Что не так в коде? Спасибо!
     
    #1 igramnet, 10 окт 2016
    Последнее редактирование модератором: 10 окт 2016
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.794
    Симпатии:
    1.331
    Адрес:
    Лень
    63 строка для jpeg и все. Где пнг и гиф?
    --- Добавлено ---
    44 так же
    --- Добавлено ---
    в моем случае. png с сохранением прозрачности ( не нужны альфа, блендинг)
    Но скрипт сам как картинка выходит результат, без сохранений.
    PHP:
    1. $BACKGROUND = imagecreatetruecolor(850, 500);
    2. $BORDER = ImageCreateFromPNG(DIR_SYSTEM .'thirdworld/images/all/2de42fbb00305f8282310f1b3e10ce9a.png');
    3. $bdX = ImageSX($BORDER);
    4. $bdY = ImageSY($BORDER);
    5. $image = ImageCreateFromPNG(DIR_SYSTEM .'thirdworld/Map/mb0/'. MB .'.png');
    6. //----------
    7. ImageSetTile($BACKGROUND, $image);
    8. imagefilledrectangle($BACKGROUND, 0, 0, 850, 500, IMG_COLOR_TILED);
    9. //----------
    10. for ($i=0;$i<count($array);$i++)
    11. {
    12.     $arr = array_reverse($array[$i]);
    13.     $strrev = strrev($XY[$i]);
    14.     for ($z=0;$z<count($arr);$z++)
    15.     {
    16.         $name = numer($strrev[$z]);
    17.         $PLIT = ImageCreateFromPNG(DIR_SYSTEM ."thirdworld/Map/$name/". GET_VALUE .".png");
    18.         $SX = ImageSX($PLIT);
    19.         $SY = ImageSY($PLIT);
    20.         ImageCopyResampled($BACKGROUND,$PLIT,$arr[$z][0]-(($SX-$arr[$z][2])/2),$arr[$z][1]-($SY-$arr[$z][3]),0,0,$SX,$SY,$SX,$SY);
    21.     }
    22. }
    23. ImageCopyResampled($BACKGROUND,$BORDER,0,0,0,0,$bdX,$bdY,$bdX,$bdY);
    24. //----------
    25. if (SIZE == TRUE)
    26. {
    27.     $width = 850;
    28.     $height = 500;
    29.     $newHeight = ceil($height/($width/SIZE));
    30.     $THEND = imagecreatetruecolor(SIZE,$newHeight);
    31.     imagecopyresampled($THEND,$BACKGROUND,0,0,0,0,SIZE,$newHeight,$width,$height);
    32. } else {
    33.     $THEND = $BACKGROUND;
    34. }
    35. //----------
    36. header('Content-type: image/png');
    37. imagepng($THEND);
    38. imagedestroy($BORDER);
    39. imagedestroy($image);
    40. imagedestroy($PLIT);
     
    #2 MouseZver, 10 окт 2016
    Последнее редактирование: 10 окт 2016
    denis01 нравится это.