2010-07-28 41 views
5

Tôi có hai tệp PNG, "red.png" và "blue.png"; chúng hầu hết đều trong suốt, nhưng có một vài điểm ảnh của các đốm màu đỏ hoặc xanh ở những nơi khác nhau.PHP + GD: imagecopymerge không giữ lại độ trong suốt PNG

Tôi muốn tạo một tập lệnh PHP kết hợp cả hai; nó phải đơn giản như một cái gì đó như:

$original = getPNG('red.png'); 
$overlay = getPNG('blue.png'); 

imagecopymerge($original, $overlay, 0,0, 0,0, imagesx($original), imagesy($original), 100); 
header('Content-Type: image/png'); 
imagepng($original); 

Khi tôi chạy tập lệnh này, tất cả những gì tôi nhận được là các chấm màu xanh - với độ trong suốt bị mất. Tôi thấy rằng tôi nên thêm những điều sau:

imagealphablending($original, false); 
imagesavealpha($original, true); 

(trên cả bản chính và lớp phủ?) Và điều đó dường như không giúp gì.

tôi thấy một vài cách giải quyết trên PHP.net, một cái gì đó theo giai điệu của:

$throwAway = imagecreatefrompng($filename); 
imagealphablending($throwAway, false); 
imagesavealpha($throwAway, true); 
$dstImage = imagecreatetruecolor(imagesx($throwAway), imagesy($throwAway)); 
imagecopyresampled($dstImage, $throwAway,0,0,0,0, imagesx($throwAway),  imagesy($throwAway),   imagesx($throwAway), imagesy($throwAway)); 

, mà nên chuyển đổi PNG để một hình ảnh "truecolor" và duy trì tính minh bạch. Nó dường như làm như vậy, nhưng bây giờ tất cả tôi thấy là màu xanh trên nền đen.

Tôi phải làm gì ?!

Trả lời

6

này hoạt động hoàn hảo cho tôi:

$img1 = imagecreatefrompng('red.png'); 
$img2 = imagecreatefrompng('blue.png'); 

$x1 = imagesx($img1); 
$y1 = imagesy($img1); 
$x2 = imagesx($img2); 
$y2 = imagesy($img2); 

imagecopyresampled(
    $img1, $img2, 
    0, 0, 0, 0, 
    $x1, $y1, 
    $x2, $y2); 

imagepng($img1, 'merged.png', 0); 

PHP Version 5.3.2
GD Phiên bản 2.0
libpng Version 1.2.42

Các bạn đã thử lưu ảnh vào một tập tin và kiểm tra xem ?

+0

Hoàn toàn hoạt động. Cảm ơn rất nhiều! Tôi vẫn phải sử dụng imagealphablending và imagesavealpha. –

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