2013-09-02 3 views
0

이미지 (jpg/gif/png/jpeg)에 워터 마크, 투명 배경이있는 PNG를 추가하려고합니다 ... 2 개의 파일이 있습니다 ... 첫 번째는 watermark.php입니다.이미지에 워터 마크 추가

<?php 
    require 'func/images.func.php'; 
    if (isset($_FILES['image'])){ 
     $file_name =  $_FILES['image']['name']; 
     $file_tmp =  $_FILES['image']['tmp_name']; 
     $name = explode('.', $file_name); 
     if (allowed_image($file_name) === true){ 
      $file_name = $img_name .'.png'; 
      watermark_image($file_tmp, 'images-watermark/uploads/' . $file_name);  
     } else{ 
      echo '<p>no image, or image type not accepted.</p>'; 
     } 
    } 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Documento senza titolo</title> 
</head> 
<body> 
<form action="" method="POST" enctype="multipart/form-data"> 
Choose an image: 
<input type="file" name="image" /> 
<input type="submit" value="watermark"/> 
</form> 
</body> 
</html> 

... 그리고 두 번째는 images.func.php입니다 :

<?php 
    function allowed_image($file_name){ 
    $allow_set = array('jpg', 'jpeg', 'gif', 'png'); 
    $file_ext = (explode('.', $file_name)); 
    $end = end($file_ext); 
    return (in_array($end , $allow_set) === true) ? true : false; 
} 

function watermark_image($file, $destination){ 
    $watermark = imagecreatefrompng('images-watermark/watermarkf.png'); 
    $source = getimagesize($file); 
    $source_mime = $source['mime']; 
    if ($source_mime === 'image/png'){ 
     $image = imagecreatefrompng($file);  
    }else if($source_mime === 'image/jpeg'){ 
     $image = imagecreatefromjpeg($file);  
    }else if($source_mime === 'image/gif'){ 
     $image = imagecreatefromgif($file);   
    } 
    imagecopy($image, $watermark, 70, 160, 0, 0, imagesx($watermark),imagesy($watermark)); 
    imagepng($image, $destination); 
    imagedestroy($image); 
     imagedestroy($watermark); 

} 
?> 

... 내 코드 (이미지가 투명 배경으로 워터 마크를 JPG/PNG/JPEG 형식으로 작동) ... GIF 이미지에서 워터 마크는 투명 배경이 아닙니다 ... 어떤 팁이 있습니까? 미리 감사드립니다.

+0

오 와우 .. 여기에 들여 쓰기가 많이 ** 부족한 것 같습니다. 문제를 해결하기 위해 합리적인 기회를 가질 수 있도록 정리하십시오. – h2ooooooo

+0

가능한 복제본 : http://stackoverflow.com/questions/13983557/php-add-transparent-png-to-gif-dynamically –

+0

또한 OP에서 imagick을 사용합니까? 나는 그것이 GD –

답변

1

GIF 이미지를 전체 RGB로 압축 해제 한 다음 혼합 한 다음 256 색으로 다시 색인해야합니다. 이미지 위에 투명한 워터 마크를 추가하면 256 가지 새로운 오버레이를 도입했기 때문에 GIF 형식으로 데이터를 캡처 할 수 없게하는 훌륭한 방법입니다.

+0

Photoshop을 사용하여 GIF 이미지를 전체 RGB로 압축을 풀 수는 있지만 ... "혼합 한 다음"다시 256 색으로 다시 색인한다는 것은 무엇을 의미합니까? 대단히 감사합니다. – umbbberto

+0

오버레이 이미지가 원본 이미지의 픽셀과 섞여 있습니다. 원본 GIF는 256 색을 가지고 있습니다. 그런 다음 투명한 워터 마크에 혼합합니다. 이제 이미지의 색상이 256 색 이상이며 팔레트를 다시 만들어 프로세스에서 정보를 잃어 버릴 필요가 있습니다. 주요 테이크 홈 수업은 GIF를 사용하지 않는 것입니다. 컴퓨터 화면에 소수의 색상 만있는 이미지 형식입니다. 네, 작아서 보간 된 PNG 파일입니다. pngcrush를 실행합니다. –

+0

ok ... 이해합니다 .. 많이 감사합니다. – umbbberto

1

실험용으로 사용하지 않는 경우 라이브러리를 사용하는 것이 좋습니다. 내 개인적으로 좋아하는 것이 PHP Image Workshop이거나 Imagine도 사용할 수 있습니다.