Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Тумбы с альфа-каналом, не могу сохранить с прозрачным фоном 
:(
    Опции темы
set36
Дата 13.6.2006, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 14.4.2006

Репутация: нет
Всего: 1



Сабж.
Когда я в галерею помещаю PNG с альфа каналом, то вся прозрачность в тумбе закрашивается чёрным. хотя сохраняет как PNG.
Может кто-то даст пример как бороться с этим smile 

Код "стандартный", могу кинуть, но он большой. 
PM MAIL   Вверх
skyboy
Дата 13.6.2006, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 3
Всего: 260



1
2
Скрипт по созданию картинки(файл transparent_image.php):
Код

<?php
  $im= imagecreatetruecolor(640,480);
  imagesavealpha($im,TRUE);
  imagefill($im,1,1,imagecolorallocatealpha($im,0,255,0,127));
  imageline($im,1,1,50,50,imagecolorallocate($im,255,0,0));
  header("Content-type: image/png");
  imagepng($im);
  ImageDestroy($im);
?>

Страница:
Код

<html>
<head>
  <title></title>
</head>
<body bgcolor="#0000000">
<img src="transparent_image.php">
</body>
</html>

Как это выглядит - в аттаче. Видимо,главное - при генерации вызывать "imagesavealpha" smile 

Это сообщение отредактировал(а) skyboy - 13.6.2006, 17:45

Присоединённый файл ( Кол-во скачиваний: 22 )
Присоединённый файл  transparent_image.png 2,46 Kb
PM MAIL   Вверх
skyboy
Дата 13.6.2006, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 3
Всего: 260



или ещё вот:
Цитата

imagealphablending -- Set the blending mode for an image
Description
bool imagealphablending ( resource image, bool blendmode ) 

Т.е. для картинки надо установить режим работы с прозрачностью. Одно "но"  - надо использовать или imagealphablending, или imagesavealpha, но не одновременно. 
PM MAIL   Вверх
set36
Дата 13.6.2006, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 14.4.2006

Репутация: нет
Всего: 1



В принципе, там отдельная функция для PNG и там написано CreateFromPNG;
сейчас попробую прилепить туда SaveAlpha.

________________________________________

Код

//GD lib
///resize class
class thumbnail
{
 var $img;

function thumbnail($imgfile)
{
 $this->img["format"]=ereg_replace(".*\.(.*)$","\\1",$imgfile);
 $this->img["format"]=strtoupper($this->img["format"]);
 if ($this->img["format"]=="JPG" || $this->img["format"]=="JPEG") {
 //JPEG
  $this->img["format"]="JPEG";
  $this->img["src"] = ImageCreateFromJPEG ($imgfile);
 } 
 elseif ($this->img["format"]=="PNG") {
 //PNG
  $this->img["format"]="PNG";
  $this->img["src"] = ImageCreateFromPNG ($imgfile);
 } 
 elseif ($this->img["format"]=="GIF") {
//GIF
  $this->img["format"]="GIF";
  $this->img["src"] = ImageCreateFromGIF ($imgfile);
 } 
 elseif ($this->img["format"]=="WBMP") {
 //WBMP
  $this->img["format"]="WBMP";
  $this->img["src"] = ImageCreateFromWBMP ($imgfile);
 }
@$this->img["lebar"] = imagesx($this->img["src"]);
@$this->img["tinggi"] = imagesy($this->img["src"]);
$this->img["quality"]=100;
}

function size_auto($size=100)
{
//size
 if ($this->img["lebar"]>=$this->img["tinggi"]) 
 {
    $this->img["lebar_thumb"]=$size;
    @$this->img["tinggi_thumb"] = ($this->img["lebar_thumb"]/$this->img["lebar"])*$this->img["tinggi"];
 } 
 else 
 {
    $this->img["tinggi_thumb"]=$size;
    @$this->img["lebar_thumb"] = ($this->img["tinggi_thumb"]/$this->img["tinggi"])*$this->img["lebar"];
 }
}

function jpeg_quality($quality=100)
{
 $this->img["quality"]=$quality;
}

function show()
{
//show thumb
@Header("Content-Type: image/".$this->img["format"]);

/* change ImageCreateTrueColor to ImageCreate if your GD not supported ImageCreateTrueColor function*/
$this->img["des"] = ImageCreateTrueColor($this->img["lebar_thumb"],$this->img["tinggi_thumb"]);
    @imagecopyresized ($this->img["des"], $this->img["src"], 0, 0, 0, 0, $this->img["lebar_thumb"], $this->img["tinggi_thumb"], $this->img["lebar"], $this->img["tinggi"]);

if ($this->img["format"]=="JPG" || $this->img["format"]=="JPEG") {
//JPEG
imageJPEG($this->img["des"],"",$this->img["quality"]);
} elseif ($this->img["format"]=="PNG") {
//PNG
imagePNG($this->img["des"]);
} elseif ($this->img["format"]=="GIF") {
//GIF
imageGIF($this->img["des"]);
} elseif ($this->img["format"]=="WBMP") {
//WBMP
imageWBMP($this->img["des"]);
}
}

function save($save="")
{
//save thumb
if (empty($save)) $save=strtolower("./thumb.".$this->img["format"]);
/* change ImageCreateTrueColor to ImageCreate if your GD not supported ImageCreateTrueColor function*/
$this->img["des"] = ImageCreateTrueColor($this->img["lebar_thumb"],$this->img["tinggi_thumb"]);
    @imagecopyresized ($this->img["des"], $this->img["src"], 0, 0, 0, 0, $this->img["lebar_thumb"], $this->img["tinggi_thumb"], $this->img["lebar"], $this->img["tinggi"]);

if ($this->img["format"]=="JPG" || $this->img["format"]=="JPEG") {
//JPEG
imageJPEG($this->img["des"],"$save",$this->img["quality"]);
} elseif ($this->img["format"]=="PNG") {
//PNG
imagePNG($this->img["des"],"$save");
} elseif ($this->img["format"]=="GIF") {
//GIF
imageGIF($this->img["des"],"$save");
} elseif ($this->img["format"]=="WBMP") {
//WBMP
imageWBMP($this->img["des"],"$save");
}
}
}
///end class

Всёравно не понимаю, куда приткнуть... 

Это сообщение отредактировал(а) set36 - 13.6.2006, 20:30
PM MAIL   Вверх
skyboy
Дата 13.6.2006, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 3
Всего: 260



а вот так:
Код

imagesavealpha($this->img["des"],true);

для вариантов формата gif и png - не катит? 
PM MAIL   Вверх
set36
Дата 14.6.2006, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 14.4.2006

Репутация: нет
Всего: 1



Я уже везде повписывал, всёравно сохраняет с чёрным фоном... 
PM MAIL   Вверх
skyboy
Дата 14.6.2006, 07:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 3
Всего: 260



ну... тут могу только развести руками и сказать: "У меня же всё работает...." Может, с PHP чего не то? приведённый мною пример пробовал? сохраняет чёрный фон? 
PM MAIL   Вверх
set36
Дата 14.6.2006, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 14.4.2006

Репутация: нет
Всего: 1



Я думаю, альфа-канал теряется до его сохранения.
Значит эту штуковину надо засунуть по-выше.

Спасибо за подсказку! Попробую, подумаю. 
PM MAIL   Вверх
skyboy
Дата 14.6.2006, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 3
Всего: 260



вставляй savealpha или imagealphablending сразу после создания ресурса. тогда сомнений не будет. 
PM MAIL   Вверх
7910
Дата 14.6.2007, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 11.6.2006
Где: Kiev

Репутация: нет
Всего: 1



Такая же фигня. Любой пример, где используется imagecreatetruecolor нормально не работает, теряется прозрачность. Но заработал такой прием без  imagecreatetruecolor:

$im = imagecreatefromgif('u/'.$entry);
$src_trans = imagecolortransparent($im);
 $dst = imagecreate($new_width,$new_height);
 imagepalettecopy($dst,$im);
 imagefill($dst,0,0,$src_trans);
 imagecolortransparent($dst,$src_trans);
 imagecopyresampled($dst,$im,0,0,0,0,$new_width,$new_height,$width,$height);

imagepng($dst, 'k/'.$i.'.png');

Может и Вам поможет

PM MAIL WWW ICQ   Вверх
skyboy
Дата 14.6.2007, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 3
Всего: 260



надо же! ровно год прошел!
PM MAIL   Вверх
7910
  Дата 14.6.2007, 19:46 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 11.6.2006
Где: Kiev

Репутация: нет
Всего: 1



Sorry, я не заметила. Думала, это сегодня 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Графика | Следующая тема »


 




[ Время генерации скрипта: 0.1029 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.