поворот полупрозрачной gif картинки

Fishus

Новичок
поворот полупрозрачной gif картинки

Задача: повернуть картинку, которая содежрит Неквадратный рисунок, а все остальное - прозрачное. (пример - треугольник, и пр.)

пытаюсь:
PHP:
$v_t='gif';
$type_file='/path/to/file';
$type_func = "imagecreatefrom".$v_t;
$type_t=$v_t;
if(!function_exists($type_func)) return false;
$type = $type_func($type_file);
$color=imagecolortransparent($type,imagecolorat($type,0,0));
$type=imagerotate($type, $vj, $color);
imagecolortransparent($type,imagecolorat($type,0,0));
header('Last-Modified: '.gmdate('D, d M Y H:i:s', time()).' GMT');
header("Content-Type: image/".$type_t);
$creat_func='image'.$type_t;
if(!function_exists($creat_func)) return false;
$creat_func($type, $destination, 100);
imagedestroy($type);
если картинка гифовая - что было прозрачным становится черным. если jpeg - то белым, и если после делать белый цвет прозрачным - эффекта никакого. уже пробовал и наложение на прозрачную картинку - все тоже самое..
Если накладывать на другую, цветную картинку - все ок,.

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

В чем проблема, где копать?
 

matross

Новичок
Re: поворот полупрозрачной gif картинки

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

Fishus

Новичок
а хорошо бы средствами сервера. желательно все-таки gd. imagemagic не стоит.

кто с проблемой сталкивался и как решали?
не поверю что rotate делался только чтоб фотки вертеть.
 

Игорёк

Новичок
Автор оригинала: Fishus
а хорошо бы средствами сервера. желательно все-таки gd. imagemagic не стоит.

кто с проблемой сталкивался и как решали?
не поверю что rotate делался только чтоб фотки вертеть.
Я работал с функцией rotate. Она как-то криво реализована. При повороте слетает и прозрачность и alpha. Так и не смог добиться нормальной работы.
 

Fishus

Новичок
вот и я не смог. пробовал изобретать велосипеды, и пр. средства - пока ничего не помогает - поворачивает нормально только jpeg, но как следствие - белый фон, который прозрачным не назначается.
 

ksnk

прохожий
Я сделал так
PHP:
  $type=imagerotate($type, $vj, imagecolorat($type,40,0));
  if (imagecolorstotal ($type)==0)imagetruecolortopalette($type,TRUE,256 ) ;
  imagecolortransparent($type,imagecolorat($type,0,0));
Учитывая, что речь идет о GIF, 40,0 - "прозрачная" точка исходного имаджа, а 0,0 - прозрачная точка повернутого. Прозрачный фон появился
 

Fishus

Новичок
угу, спасибо за помощь, работает.
видимо я не подумал, что прозрачный пиксель поворачивается вместе с картинкой =)

так будет корректнее? при условии, что прозрачный пиксель всегда в левом верхнем углу?
PHP:
$type=imagerotate($type, $vj, imagecolorat($type,0,0)); 
  if (imagecolorstotal ($type)==0)imagetruecolortopalette($type,TRUE,256 ) ; 
  imagecolortransparent($type,imagecolorat($type,0,imagesy($type)-1));
 

ksnk

прохожий
Все от картинки зависит. И от угла поворота ;)
А не работало (во всяком случае у меня) потому, что после поворота отсутствовала в изображении палитра в том смысле, в каком ее понимает GD. С большой вероятностью, imagerotate делает truetype изображение без палитры. Соответственно и установка "прозрачности" теряет свой смысл. Вероятно, стоит убрать проверку на if (imagecolorstotal ($type)==0) и создавать палитру безусловно. Да и количество цветов неплохо бы откорректировать.
 
Сверху