2010-12-07 2 views
3

저는 PHP + 이미지 조작에 대한 약간의 실험을하고 있습니다. 일부 이미지를 흑백 버전으로 변환하려고합니다. 나는 대부분 알아 냈지만 약간의 문제가 있습니다.imagejpeg을 사용하여 이미지 파일 저장 및 제공

서버 부담을 줄이기 위해 B & W 버전을 저장하고 스크립트를 통해 이전에 실행되지 않은 이미지에만 이미지 필터링을 실행하고 싶습니다. 그래서, 이런 식으로 뭔가를 가지고 :

<?php 
header("Content-type: image/jpeg"); 

$file = $_GET['img']; 
$name = md5($file).".jpg"; 

if(file_exists("/path/to/file" . $name)) { 

    ob_clean(); 
    flush(); 
    readfile("path/to/file" . $name); 
    exit; 

} 
else { 

$image = imagecreatefromjpeg($file); 

imagefilter($image, IMG_FILTER_GRAYSCALE); 
imagejpeg($image, "/path/to/file" . $name); 

imagedestroy($image); 
}; 

?> 

이 파일의 B & W 버전을 작성하고 서버에 저장한다. 초기 "if"구문도 작동합니다. 이미지가 이미 존재하면 올바르게 처리됩니다.

실행되는 새 이미지의 경우 문제가 저장되지만 브라우저에 출력되지 않습니다. 그렇게하기 위해서 내가 무엇을 바꿀 수 있습니까?

또한, 처음으로 이와 같은 작업을 수행합니다. 위의 작업에 대한 일반적인 팁을 알려 주시면 감사하겠습니다.

답변

5

위의 기능을위한 컴팩트하고 올바른 양식은 다음과 같습니다

<?php 
header("Content-type: image/jpeg"); 

$file = $_GET['img']; 
$name = md5($file).".jpg"; 

if(!file_exists("/path/to/file" . $name)) { 
imagefilter($image, IMG_FILTER_GRAYSCALE); 
imagejpeg($image, "/path/to/file" . $name); 
} else { 
$image = imagecreatefromjpeg("/path/to/file" . $name); 
} 

imagejpeg($image); 
imagedestroy($image); 

?> 
당신은 이미지 출력 기능의 코드를 포장 할 수
2

imagejpeg()으로 이미지를 저장하면 else 부분에 이미지가 표시되지 않습니다.) 그래서 당신은 imagedestroy()

readfile("/path/to/file". $name); 

을 추가해야합니다.

1

-이 같은 (안된) :

function output_image ($image_file) { 
    header("Content-type: image/jpeg"); 
    header('Content-Length: ' . filesize($image_file)); 
    ob_clean(); 
    flush(); 
    readfile($image_file); 
} 

$file = $_GET['img']; 
$name = md5($file) . ".jpg"; 
$image_file = "/path/to/file/" . $name; 

if(!file_exists($image_file)) { 

    $image = imagecreatefromjpeg($file); 
    imagefilter($image, IMG_FILTER_GRAYSCALE); 
    imagejpeg($image, $image_file); 
    imagedestroy($image); 

} 

output_image($image_file); 
+4

왜 아래로 투표? 내가 잘못한 부분을 고칠 수 있도록 설명하는 것이 도움이 될 것입니다. – Mike

관련 문제