2011-12-08 78 views
8

Cách tạo hình ảnh với GDlib với nền trong suốt?Cách tạo hình ảnh với nền trong suốt

header('content-type: image/png'); 

$image = imagecreatetruecolor(900, 350); 

imagealphablending($image, true); 
imagesavealpha($image, true); 

$text_color = imagecolorallocate($image, 0, 51, 102); 
imagestring($image,2,4,4,'Test',$text_color); 

imagepng($image); 
imagedestroy($image); 

đây nền là màu đen

+0

bạn phải sử dụng 'imagefill' và điền vào đó với màu sắc phân bổ (imagecolorallocatealpha) có alpha thiết lập để 0. –

+0

@noice, tạo ra một câu trả lời .. nó hoạt động – clarkk

+0

@NoICE: phân bổ màu sắc là không cần thiết , đó là một hình ảnh màu sắc thực sự. – mvds

Trả lời

7

Bạn phải sử dụng imagefill() và điền vào đó với màu sắc phân bổ (imagecolorallocatealpha()) đã alpha thiết lập để 0.

Như @mvds nói: "Cấp phát là không cần thiết", nếu nó là một hình ảnh truecolor (24 hoặc 32bit) nó chỉ là một số nguyên, vì vậy bạn có thể chuyển số nguyên đó trực tiếp đến imagefill().

PHP nào trong nền cho hình ảnh truecolor khi bạn gọi imagecolorallocate() là điều tương tự - nó chỉ trả về số nguyên được tính.

21

Thêm một dòng

imagefill($image,0,0,0x7fff0000); 

ở đâu đó trước khi imagestring và nó sẽ trong suốt.

0x7fff0000 chia ra làm:

alpha = 0x7f 
red = 0xff 
green = 0x00 
blue = 0x00 

đó là hoàn toàn minh bạch.

+0

Bạn đã làm cho ngày của tôi :) Cảm ơn! –

8

Something như thế này ...

$im = @imagecreatetruecolor(100, 25); 
# important part one 
imagesavealpha($im, true); 
imagealphablending($im, false); 
# important part two 
$white = imagecolorallocatealpha($im, 255, 255, 255, 127); 
imagefill($im, 0, 0, $white); 
# do whatever you want with transparent image 
$lime = imagecolorallocate($im, 204, 255, 51); 
imagettftext($im, $font, 0, 0, $font - 3, $lime, "captcha.ttf", $string); 
header("Content-type: image/png"); 
imagepng($im); 
imagedestroy($im); 
+0

Điều này làm cho nền trong suốt của tôi trắng thay vì màu đen: ( – Bolas

1

Đôi khi bạn sẽ không nhận hình ảnh trong suốt do các vấn đề trong ảnh PNG. Hình ảnh phải có một trong các định dạng được đề nghị sau:

PNG-8 (recommended) 
Colors: 256 or less 
Transparency: On/Off 
GIF 
Colors: 256 or less 
Transparency: On/Off 
JPEG 
Colors: True color 
Transparency: n/a 

Chức năng imagecopymerge không xử lý đúng hình ảnh PNG-24; do đó không khuyên bạn nên.

Nếu bạn đang sử dụng phần mềm Adobe Photoshop để tạo ra hình ảnh mờ, chúng tôi khuyên bạn sử dụng "Save for Web" lệnh với các cài đặt sau:

File Format: PNG-8, non-interlaced 
Color Reduction: Selective, 256 colors 
Dithering: Diffusion, 88% 
Transparency: On, Matte: None 
Transparency Dither: Diffusion Transparency Dither, 100% 
6

này nên làm việc:

$img = imagecreatetruecolor(900, 350); 

$color = imagecolorallocatealpha($img, 0, 0, 0, 127); //fill transparent back 
imagefill($img, 0, 0, $color); 
imagesavealpha($img, true); 
4

Điều này sẽ làm việc. Nó đã làm cho tôi.

$thumb = imagecreatetruecolor($newwidth,$newheight); 
$transparent = imagecolorallocatealpha($thumb, 0, 0, 0, 127); 
imagefill($thumb, 0, 0, $transparent); 
imagesavealpha($thumb, true); 
imagecopyresampled($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); 
imagepng($thumb, $output_dir); 
+0

Mã chỉ trả lời được khuyến khích vì chúng không cung cấp nhiều thông tin cho người đọc trong tương lai, vui lòng cung cấp một số giải thích cho những gì bạn đã viết – WhatsThePoint

+0

Chức năng 'imagesavealpha()' đã lưu ngày của tôi. : 'đặt cờ để cố gắng lưu toàn bộ thông tin kênh alpha (trái ngược với độ trong suốt một màu) khi lưu hình ảnh PNG' –

Các vấn đề liên quan