2011-11-15 30 views
9

Tôi đang cố gắng giảm kích thước một số hình ảnh trong suốt bằng PHP với GD, và bất cứ khi nào tôi làm, có một đường viền đen-đen kỳ lạ được thêm xung quanh nó.Thay đổi kích thước hình ảnh trong PHP GD cho viền đen

Trước before

Sau enter image description here

<?php 
    $image = imagecreatefromstring(file_get_contents('logo.png')); 
    $width = imagesx($image); 
    $height = imagesy($image); 

    $newWidth = $width - 1; 
    $newHeight = $height - 1; 
    $output = imagecreatetruecolor($newWidth, $newHeight); 
    imagecolortransparent($output, imagecolorallocatealpha($output, 0, 0, 0, 127)); 
    imagealphablending($output, false); 
    imagesavealpha($output, true); 
    imagecopyresampled($output, $image, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height); 

    header('Content-Type: image/png'); 
    imagepng($output); 
?> 

Dường như nếu tôi thay đổi mã cho kích thước mới để được giống như các cũ (loại bỏ các - 1), không có viền đen xuất hiện. Vì vậy, thay đổi kích thước đang gây ra sự cố.

Có ai có ý tưởng gì có thể sai không?

Chỉnh sửa: Tôi vừa nhận ra điều này chỉ xảy ra với imagecopyresampled chứ không phải imagecopyresized. Tuy nhiên, imagecopyresampled mang lại hiệu ứng hình ảnh tốt hơn nhiều và tôi muốn làm cho nó hoạt động nếu có thể.

+0

Có vẻ như chống răng cưa đang sử dụng màu đen cho màu mờ. – Brad

+0

@Brad thực sự là vậy. Tuy nhiên, trang tài liệu nói rằng chống răng cưa bị tắt theo mặc định và nó chỉ đi kèm với phiên bản gói GD mà tôi không sử dụng. Có lẽ một số chức năng khác là gây ra nó nhưng tôi không thấy bất kỳ thông số khác như xa như tôi có thể nói ... –

+0

Tôi chỉ nhận ra nó chỉ xảy ra với ['imagecopyresampled'] (http://php.net/manual/en /function.imagecopyresampled.php) và không phải là ['imagecopyresized'] (http://php.net/manual/en/function.imagecopyresized.php). Tuy nhiên, 'imagecopyresampled' cho hiệu ứng hình ảnh tốt hơn nhiều và tôi muốn nó hoạt động nếu có thể. –

Trả lời

3

Tôi nghĩ rằng vấn đề ở đây là hình ảnh nguồn của bạn.

Những gì bạn có không phải là PNG màu thực với kênh alpha, nhưng PNG có màu được lập chỉ mục có màu trong suốt. Đây là rõ ràng nếu bạn mở hình ảnh trong Photoshop:

Image as seen in Photoshop

Hình ảnh này đã được tạo ra với anti-aliasing đã (mà cung cấp cho các văn bản màu vàng mà đường viền màu trắng-ish nhìn thấy ở đây), nhưng khi bạn thay đổi kích thước nó, các tính toán phụ pixel có thể đi ra ngoài biên giới của họ một chút.

Tôi nghi ngờ nếu bạn sửa hình ảnh, làm cho nó đầy RGB với kênh alpha, bạn sẽ không gặp phải vấn đề này.

+0

Cảm ơn câu trả lời. Bạn có thể biết bất kỳ cách nào để làm cho nó hoạt động theo chương trình hoặc là nó có thể hoàn tác? –

+0

Điều tốt nhất cần làm là có được hình ảnh nguồn tốt. Điều này là dễ dàng để sửa chữa cho bạn trong Photoshop. Gửi email cho tôi theo địa chỉ [email protected] và tôi sẽ gửi cho bạn tệp đã cập nhật. – Brad

+0

cảm ơn rất nhiều vì sự giúp đỡ của bạn. Vấn đề là điều này được thực hiện bởi các khách hàng của chúng tôi trên giao diện web. Tôi cho rằng họ sẽ phải làm. Cảm ơn một lần nữa. –

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