2010-06-10 2 views
4

Привет, мне нужно перевернуть изображение thumpnail, прежде чем объединить его с другим файлом jpeg. но когда я поворачиваю 45 градусов, используя php. Он показывает черный фон. как я могу избежать этого. любой орган может мне помочь.Как избежать черного фона при повороте изображения на 45 градусов с помощью PHP?

+0

Я не думаю, что вы можете. Фон должен быть установлен в цвет, поскольку изображения JPEG не поддерживают прозрачные фоны. Поэтому, если вы повернете на какой-то нечетный угол, он должен заполнить эти другие пиксели цветом. Я просто ушел с использованием PHP GD, потому что он делал так много случайных вещей, и я никогда не мог заставить ничего работать правильно. Это просто беспорядок. – animuson

+0

Привет, сэр, извините, теперь я редактировал вопрос. если я поворачиваю его на 90, 180 и т. д., но мне нужно вращение на 25 или 40 градусов. но в это время он показывает это заднее основание – learner

+0

@learner: если вы поворачиваете 90, 180 и т.д., изображение все равно будет содержаться в одной и той же «ограничительной рамке». Если вы повернете на 45 градусов, GD не будет знать, что положить в угловые пиксели, поскольку у исходного изображения ничего не было. – nico

ответ

1
<? 
$image = "130.jpg"; 
$degrees = 25; 
for($i=0;$i<count($data);$i++){ 
    $ext = ""; 
    $extarr = ""; 
    $extarr = explode(".", $data[$i]['name']); 
    $ext = array_pop($extarr); 
    if($ext == "png"){ 
     $rotate = imagecreatefrompng("images/".$data[$i]['name']); 
     $transColor = imagecolorallocatealpha($rotate, 255, 255, 255, 270); 
     $watermark1[$i] = imagerotate($rotate, ((360-$degrees)%360), $transColor); 
    } 
} 

function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $opct){ 
    $w = imagesx($src_im); 
    $h = imagesy($src_im); 
    $cut = imagecreatetruecolor($src_w, $src_h); 
    imagecopy($cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h); 
    imagecopy($cut, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h); 
    imagecopymerge($dst_im, $cut, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, (100 - $opct)); 
} 


for($i=0; $i<count($watermark1); $i++){ 
    if($i == 0) imagecopymerge_alpha($image, $watermark1[$i], $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, $opacity); 
    else imagecopymerge_alpha($image, $watermark1[$i], ($i*$dest_x)*3, ($i*$dest_y)*15, 0, 0, $watermark_width, $watermark_height, $opacity); 
    imagedestroy($watermark1[$i]); 
} 
header("content-type: image/png"); 
imagepng($image); 
imagedestroy($image); 
?> 

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

3

Ну, если вы создаете jpg, используя PHP GD, вы задаете цвет фона как третий вариант функции imagerotate. В этом примере я буду считать, что вы вращение JPG изображений $filename произвольных $angle градусов, и вы хотите, белый фон, то есть код цвета 16777215:

$rotatedImage = imagerotate(imagecreatefromjpeg($filename), ((360-$angle)%360), 16777215); 

черного цвет код 0, который по умолчанию , а остальная часть цветовой гаммы находится между ними, так что вам просто нужно решить, какой цвет фона вы хотели

EDIT: для прозрачных слоев, если вы генерируете PNG вы могли бы сделать:

$destimg = imagecreatefromjpeg($filename); 
$transColor = imagecolorallocatealpha($destimg, 255, 255, 255, 127); 
$rotatedImage = imagerotate($destimg, ((360-$angle)%360), $transColor); 

Надежда, что помогает

+0

Как я могу сделать его прозрачным. Если бы я дал -1, он также отобразит белое заднее основание. – learner

+0

@learner: Как я уже сказал, вы не можете. Изображения JPEG не поддерживают прозрачные фоны. – animuson

+0

Можно ли изменить файл jpeg в формате gif при его загрузке. у вас есть другие предложения для меня. – learner

Смежные вопросы