문제

이 질문은 LIB 또는 기능 갤러리를 제공하는 LIB를 언급하기 전에 요청되었지만 처음부터 하나를 만들고 싶습니다. 그래서 다음에 대한 아이디어

  1. 갤러리는 양식을 사용하여 업로드해야합니다.
  2. 파일이 업로드 될 때 썸네일 이미지를 작성해야합니다.
  3. 예를 들어 DB에 이미지 또는 파일 이름으로 저장된 데이터베이스에서 어떻게 구성되어야합니까?

요구 사항

  • PHP와 MySQL 만

어떤 아이디어? 도 할 수 없다면 알려주세요 : D

감사

도움이 되었습니까?

해결책

귀하의 질문에 답하려고합니다.


질문 1

그 부분은 실제로 간단합니다. 파일 업로드 양식을 작성하려면 HTML이 다음과 같아야합니다.

 <form enctype='multipart/form-data' action='CodeTool.php' method='POST'>
     File: <input name='picture' type='file'/>
     <input type='submit' value='Upload'/>
 </form>

당신의 양식에는 있어야합니다 enctype='multipart/form-data' 그리고 method 될 필요가있다 POST. 그런 다음 업로드 파일을 읽으려면 다음을 간단히 사용할 수 있습니다. 또한 파일이 이미지인지 확인하기 위해 몇 가지 기본 유효성 검사를 추가했습니다.

 if(isset($_FILES['picture'])) {
     echo "File has been uploaded under temp file " . $_FILES['picture']['tmp_name'];

     // Let's check if the file is an image:
     $fileData = file_get_contents($_FILES['picture']['tmp_name']);

     // Using imagecreatefromstring, that way you don't need to
     // guess the image format.

     if(($img = @imagecreatefromstring($fileData)) !== FALSE) {
         echo " and is a valid image";
     } else {
         echo " and is not a valid image";
     }
 }

질문 2

썸네일 이미지를 만들려면 GD (또는 imagemagick, 기본 구성에 포함되지 않음)를 사용할 수 있습니다. imagecreatefromstring if 성명:

if(($img = @imagecreatefromstring($fileData)) !== FALSE) {
    // Let's create a 100x100 thumbnail
    $width = imagesx($img);
    $height = imagesy($img);

    $boxSize = min($width,$height);
    $boxX = ($width / 2) - ($boxSize / 2);
    $boxY = ($height / 2) - ($boxSize / 2);

    $thumb = imagecreatetruecolor(100, 100);
    imagecopyresampled($thumb, $img, 0, 0, $boxX, $boxY, 100, 100, $boxSize, $boxSize);

    //$thumb is now a 100x100 thumbnail
}

질문 3

여기에는 두 가지 옵션이 있습니다. 이미지를 파일 시스템 또는 데이터베이스에 저장할 수 있습니다. 파일 시스템에 이미지를 저장하려면 다음을 수행 할 수 있습니다.

if(($img = @imagecreatefromstring($fileData)) !== FALSE) {
    move_uploaded_file($_FILES['picture']['tmp_file'], 'somefile.jpg');
    // the code from the previous example
    imagejpeg($thumb, 'somefile_thumb.jpg');
}

나는 개인적으로 데이터베이스를 사용하여 참조 무결성을 유지하고 백업을 더 간단하게 만들기 때문에 이미지를 저장하는 것을 선호합니다 (데이터베이스를 백업하면 완료됩니다). 조금 느리지 만 차이는 그다지 크지 않습니다.

if(($img = @imagecreatefromstring($fileData)) !== FALSE) {
    // the code from the previous example

    $tmp_thumb = tempnam(sys_get_temp_dir(), 'thumb');
    imagejpeg($thumb, $tmp_thumb);

    $thumbData = file_get_contents($tmp_thumb);

    mysql_query("INSERT INTO images (original, thumb) VALUES ('" . mysql_real_escape_string($fileData) . "', '" . mysql_real_escape_string($thumbData) . "');");
} 

필드는 있어야합니다 BLOB.

다른 팁

파일 시스템에 이미지를 저장 한 다음 DB 항목에서 Filename Path를 참조하려고합니다. 특히 여러 이미지에 대한 정보를 가져 오려는 경우 쿼리 결과 크기를 줄입니다. 또한 썸네일을 만드는 데 사용하려면 Imagemagick과 같은 것을 호출하는 것이 훨씬 쉽습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top