2011-11-19 4 views
0

서버 측에서 이미지의 크기를 조정하여 동적 인 축소판을 만들려합니다. 이 코드 사용하고 있습니다 :PHP를 사용하여 서버 측에서 JPEG 크기 조정

<?php 
Header("Content-type: image/jpeg"); 
$img_src = $_GET['photo']; 

$size = getimagesize($img_src); 

$src_w = $size[0]; 
$src_h = $size[1]; 

$dst_w = 80; 
$dst_h = 80; 

$test_h = round(($dst_w/$src_w) * $src_h); 
$test_w = round(($dst_h/$src_h) * $src_w); 


if($src_w > $src_h) { 
    $x = $test_w; 
    $y = $dst_h; 
} elseif($src_h > $src_w) { 
    $x = $dst_w; 
    $y = $test_h; 
} 

$img_new = imagecreatefromjpeg($img_src); 
$img_mini = imagecreatetruecolor($x, $y); 
imagecopyresampled($img_mini,$img_new,0,0,0,0,$x,$y,$src_w,$src_h); 
imagejpeg($img_mini); 
?> 

을하지만 그것은 작동하지 않았다, 나는 그 이유를 찾을 수 없습니다. 아무런 오류가 없다. 아무 것도 나타나지 않았다. 아무도 도와 줄 수 있습니까?

감사합니다.

+1

* * 작동하지 않았습니까? – bos

+0

죄송합니다. 게시물을 편집했습니다. –

+0

$ _GET [ '사진']은 (는) URL입니까? –

답변

2

당신이 빈 페이지를 받고있는 경우, 다음 중 당신의 스크립트 나 PHP 메모리 제한 시간 초과 초과되었습니다. ini_set 기능을 사용하여 모든 gd 기능을 시작하기 전에 memory_limitmax_execution_time을 설정하십시오.

이미지 조작에는 메모리뿐만 아니라 시간이 걸립니다. 따라서 이러한 구성이 중요합니다.

+0

그것은 문제를 해결한다; 당신의 도움을 주셔서 감사합니다. –

0

확인이 라인 :

$size = getimagesize($img_src); 

당신이 $img_src을 정의

그렇지 않으면 ..이 글에서 살펴? 나는 그것을 볼 수 없다!

편집 기록 된 파일로 리디렉션 후 디스크에 파일을 작성하는 사용이 코드 :

<?php 

$chemin = $_GET['photo']; 

$size = getimagesize($chemin); 


$src_w = $size[0]; 
$src_h = $size[1]; 

$dst_w = 80; 
$dst_h = 80; 

$test_h = round(($dst_w/$src_w) * $src_h); 
$test_w = round(($dst_h/$src_h) * $src_w); 


if($src_w > $src_h) { 
    $x = $test_w; 
    $y = $dst_h; 
} elseif($src_h > $src_w) { 
    $x = $dst_w; 
    $y = $test_h; 
} 

$img_new = imagecreatefromjpeg($chemin); 
$img_mini = imagecreatetruecolor($x, $y); 

imagecopyresampled($img_mini, $img_new, 0, 0, 0, 0, $x ,$y, $src_w, $src_h); 

$name=rand() * rand() . '.jpg'; 

imagejpeg($img_mini, $name); 
header("Location: $name"); 

?> 
+0

복사/붙여 넣기 오류로, 첫 번째 게시물을 수정하여 수정했습니다. 죄송합니다. –

+0

이제'$ chemin' 사람이 없습니다 ... 브라우저 대신 파일로 출력하면 어쨌든 정상적으로 작동하는 스크립트입니다. –

+0

HTTP를 통해 전달할 때 바이트가 잘리는 것처럼 보입니다. 작동하기 때문에 완벽하게 파일 시스템에 출력 할 때. 나는 대답을 편집하고 그것을 확인했다. –

0

오류가 발생하지 않는다면, 내가 아는 테스트 이미지로 작업하고이 줄을 따라 작업하여 예상 한 결과를 얻을 수 있음을 확인하고, 문제를 일으키는 해당 함수의 기대 수익률 결과를 확인하고이 코드가 고착되는 위치 또는 원하는 결과를 얻지 못하는 위치를 출력하는 조건부를 만듭니다.

예 :

if (isset($img_src)) { 
    echo "No image parameter set in the URL"; 
    return; 
} 
0

당신은 아마 당신이 파일을 열 수 있도록 실제 파일 경로로 받고 URL을 번역해야합니다. 나는 당신이 사용하는 함수가 URL이 아닌 파일 경로를 기대한다고 생각한다. 그렇지 않다면 클라이언트에서 CSS를 통해 하나의 이미지를 다운로드하고 크기를 조정하는 것을 피하기 위해 2 개의 추가 요청을해야합니다.

어떤 경우에도 미리보기 이미지의 크기를 조정하려면 thumbs (또는 기타) 하위 디렉토리의 미리보기 이미지를 캐싱해야합니다. 그런 다음 각 요청에 대해 미리보기 이미지가 있는지 확인한 다음 미리보기 이미지를 만들기 전에 직접 미리 제공하십시오. 또는 파일이 동적으로 업로드되지 않은 경우 섬네일을 미리 만들고 thumbs 디렉토리에서 직접 참조하십시오.

관련 문제