2010-05-30 2 views
0

net tutsplus에서 가져온이 소스 코드가 있습니다. 나는 그것을 설정하고 그것을 하나의 PHP 파일로 만들었다. 원본 이미지는 전송되지만 축소판 폴더에는 생성되지 않습니다.섬네일 생성 PHP 문제

<?php 

$final_width_of_image = 100; 
$path_to_image_directory = "../../img/events/" . urldecode($_GET['name']) . "/"; 
$path_to_thumbs_directory = "../../img/events/" . urldecode($_GET['name']) . "/thumbnails/"; 

function createThumbnail($filename) 
{ 
    if(preg_match('/[.](jpg)$/', $filename)) 
    { 
     $im = imagecreatefromjpeg($path_to_image_directory . $filename); 
    } 
    elseif(preg_match('/[.](gif)$/', $filename)) 
    { 
     $im = imagecreatefromgif($path_to_image_directory . $filename); 
    } 
    elseif(preg_match('/[.](png)$/', $filename)) 
    { 
     $im = imagecreatefrompng($path_to_image_directory . $filename); 
    } 

    $ox = imagesx($im); 
    $oy = imagesy($im); 

    $nx = $final_width_of_image; 
    $ny = floor($oy * ($final_width_of_image/$ox)); 

    $nm = imagecreatetruecolor($nx, $ny); 

    imagecopyresized($nm, $im, 0,0,0,0,$nx,$ny,$ox,$oy); 

    imagejpeg($nm, $path_to_thumbs_directory . $filename); 
    $tn = '<img src="' . $path_to_thumbs_directory . $filename . '" alt="image" />'; 
    echo $tn; 
} 

if(isset($_FILES['fupload'])) { 

    if(preg_match('/[.](jpg)|(gif)|(png)$/', $_FILES['fupload']['name'])) { 

     $filename = $_FILES['fupload']['name']; 
     $source = $_FILES['fupload']['tmp_name']; 
     $target = $path_to_image_directory . $filename; 

     move_uploaded_file($source, $target); 

     createThumbnail($filename); 
    } 
} 

?> 

기본적으로 업로드 된 이미지의 미리보기 이미지를 생성하고 원본 이미지를 다른 폴더에 저장해야합니다.

경로가 정확합니다. URL에서 폴더 이름을 가져와 작동하지만 작동하지만 아무 것도 축소판 폴더에 대해 작동하지 않습니다.

이 질문을하기 전에 네, 섬네일 세대가 PHP GD에서 내 서버에서 작동하는지, 별도로 테스트 해 보았습니다. 그래서 이것은 문제가 아닙니다. :)

어떻게 작동합니까? 그것은 더 나은 썸네일을 생성하므로 :(

+0

에 오류가 있습니다 ... 당신의 요구 사항과 요구 사항이 무엇인지에 달려 또는 그냥 아무것도 표시되지 않습니다? – miku

+0

썸네일 폴더가 있고 올바른 권한을 가지고 있습니까? 오류 메시지가 나타 납니까? –

+0

이미지를 보여 주지만 축소판 크기로 축소되지는 않습니다. 권한은 괜찮습니다. – MacMac

답변

2

음, 첫째, imagecopyresampled()를 사용합니다.

을 둘째, 당신은 파일 시스템 디렉토리 및 URL 디렉토리에 동일한 변수를 사용할 수 없습니다. 당신은 $filesystem_path_to_thumbs$url_path_to_thumbs을 가져야한다 따라서 너는 다르게 설정할 수있다.

셋째, 너비와 높이 모두에 대한 크기 검사를 원할 수있다. 누군가 큰 이미지를 업로드하면 어떻게 될까? 당신의 썸네일은 대상 상자 밖에있다. 큰 문제가 될 수 있습니다.)

넷째, B

마지막으로, 실제로 실패 년대 이유는 내에서 정의되지 않은 $final_width_of_image, $path_to_image_directory$path_to_thumbs_directory입니다 ... 썸네일 파일 (성능상의 이유로) 썸네일을 생성하기 전에 엄지 손가락 디렉토리에 존재하는지 확인을 기능. 다음 중 하나를

  1. 은 함수의 시작에 그들을 글로벌 확인, 그래서 당신은 global $final_width_of_image, $path_to_image_directory, $path_to_thumbs_directory;

  2. 그들 함수에 인수 확인 함수의 내부에 액세스 할 수 있습니다 : function createTumbnail($image, $width, $path_to_images, $path_to_thumbs) {

  3. 하드 코드를 함수 내부에서 선언을 함수 외부에서 함수 내부로 이동하십시오.

개인적으로, 나는 # 2를 할 거라고하지만

+0

내 코드를 제안과 함께 사용해야하는 방식으로 편집 해 주실 수 있습니까? – MacMac

+0

내가 준 것만 큼해야 할 일이 무엇인지 알아낼 수있을 것 같습니다. 당신이 혼란 스러우면 무엇을 혼란스럽게하는지 물어보십시오. – ircmaxell