2011-11-15 2 views
9

GD를 사용하여 PHP에서 일부 투명 이미지를 축소하려고하는데, 할 때마다 주위에 추가 된 이상한 검정색 테두리가 있습니다.PHP GD 검은 색 테두리를주는 투명 이미지 크기 조정

전에 before

코드 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); 
?> 

내가의 코드를 변경하면 새로운 치수는 동일 할 것으로 보인다 이전 (제거 - 1) 검은 색 테두리가 나타나지 않습니다. 크기를 조정하면 문제가 발생합니다.

누구에게 잘못된 생각이 있습니까?

편집 : 난 그냥 단지 imagecopyresampled하지 imagecopyresized으로 발생 깨달았다. 그러나 imagecopyresampled은 시각적 효과가 훨씬 뛰어나며 가능하면 가능하도록하고 싶습니다.

+0

앤티 앨리어싱이 매트 색상에 검정색을 사용하는 것처럼 보입니다. – Brad

+0

@ 브래드 실제로 그렇습니다. 그러나 설명서 페이지에는 앤티 앨리어싱이 기본적으로 해제되어 있으며 사용하지 않는 GD 번들 버전 만 제공된다는 내용이 있습니다. 어쩌면 다른 함수가 그것을 일으키는 것일 수도 있지만, 내가 말할 수있는 한 다른 매개 변수는 보이지 않는다. –

+0

나는 단지''imagecopyresampled'] (http://php.net/manual/en /function.imagecopyresampled.php)이 아니라 ['imagecopyresized'] (http://php.net/manual/en/function.imagecopyresized.php)를 참조하십시오. 그러나,'imagecopyresampled'는 시각적 효과가 훨씬 뛰어나며 가능하면 가능하게 만들고 싶습니다. –

답변

3

여기 소스 이미지가 문제라고 생각합니다.

가지고있는 것은 알파 채널이 포함 된 트루 컬러 PNG가 아니라 투명 색상이있는 인덱싱 된 색상 PNG입니다. 이것은 당신이 포토샵에서 이미지를 열면 분명하다 :

Image as seen in Photoshop

이 이미지 (흰색 틱 테두리 여기에 본 그 노란색 텍스트를 제공) 이미 안티 앨리어싱 만들었습니다,하지만 당신은 다시 크기 서브 픽셀 계산은 경계 밖으로 벗어날 수 있습니다.

이미지를 수정하여 알파 채널로 전체 RGB로 만들면이 문제가 발생하지 않을 것으로 생각됩니다.

+0

답변 해 주셔서 감사합니다. 프로그래밍 방식으로 작동하게하는 방법이나 실행 취소 할 수있는 방법을 알고 있습니까? –

+0

좋은 방법은 좋은 소스 이미지를 얻는 것입니다. 이것은 Photoshop에서 쉽게 해결할 수있었습니다. [email protected]으로 전자 메일을 보내면 업데이트 된 파일을 보내 드리겠습니다. – Brad

+0

대단히 고맙습니다. 문제는 이것이 웹 인터페이스에서 클라이언트가 수행한다는 것입니다. 나는 그들이해야 할 것 같아요. 다시 한번 감사드립니다. –

관련 문제