웹프로그래밍

Global It Leader!!


PHP


 
 

업로드 이미지 크기 조절해서 저장하기

페이지 정보

작성자 no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 댓글 0건 조회 2,212회 작성일 15-05-21 23:02

본문

겔러리에서 원본 이미지의 이미지 사이즈만 줄여서 리스트를 출력하게 하는곳이 많은데요
대략 한 리스트에서 100k단위의 이미지를 20개 이상씩 출력해주니 느린 인터넷을 사용하는
곳에서는 겔러리 페이지 가면 느려서 답답하네요~

그래서 내가 만약 겔러리를 짜면 이 문제점을 어떻게 해결해야 할까 생각하고 이미지 자체
의 사이즈를 줄이는게 아니라 사이즈를 줄인 이미지 자체로 바꾸는 코드를 작성해봤습니다.
용량은 130*100 으로 줄였을 경우 한 이미지당 몇K의 용량밖에 안되더군요..
순식간에 리스트가 파르르르 나옵니다.

GD그래픽 라이브러리를 이용했는데
일단 GIF패치가 된 GD를 사용하셔야 되고 PHP와 연동되어야 합니다.

GD는 GIF라이센스때문에 GD를 배포하는곳에서는 GIF 쓰기가 되지 않는 GD를 배포하고
있습니다.
일단 이것을 다운로드 받아 GIF쓰기 패치를 하시면 됩니다.

현재 Stable 정식인 최신 버젼입니다.
http://www.boutell.com/gd/http/gd-2.0.15.tar.gz
GIF쓰기 패치입니다.
http://downloads.rhyme.com.au/gd/patch_gd2.0.15_gif_030801.gz

다운 받으신후(wget을 이용하시면 편합니다.)
tar xvzf gd-2.0.15.tar.gz
gzip -d patch_gd2.0.15._gif_030801.gz
patch -d gd-2.0.15 < patch_gd2.0.15_gif_030801 // 패치작업
cd gd-2.0.15
./configure --prefix=/usr/local/gd;make;make install
하시면 GD가 /usr/local/gd 에 설치됩니다.

php 셋팅하실때는
--with-gd=/usr/local/gd --enable-exif 가 추가되어야 gd기능을 완벽히 활용할
수 있습니다.
--enable-exif 옵션은 이미지 타입을 알아내주는 기능을 가집니다.

gd.php 등으로 이 파일을 작성합니다.
<?php

// gd에 사용될 임시 변수들
$IsTrueColor = false;
$Extension = null;

// 이미지를 로딩하는 함수입니다.
function GDImageLoad($filename)
{
       global $IsTrueColor, $Extension;

       if( !file_exists($filename) ) return false;

       $image_type = @exif_imagetype($filename);

       switch( $image_type ) {
              case IMAGETYPE_JPEG: // JPEG일경우
                     $im = imagecreatefromjpeg($filename);
                     $Extension = "jpg";
                     break;
              case IMAGETYPE_GIF: // GIF일 경우
                     $im = imagecreatefromgif($filename);
                     $Extension = "gif";
                     break;
              case IMAGETYPE_PNG: // png일 경우
                     $im = imagecreatefrompng($filename);
                     $Extension = "png";
                     break;
              default:
                     break;
       }

       $IsTrueColor = @imageistruecolor($im);

       return $im;
}

// 이미지 크기를 줄입니다.
function GDImageResize($src_file, $dst_file, $width = NULL, $height = NULL, $type = NULL, $quality = 75)
{
       global $IsTrueColor, $Extension;

       $im = GDImageLoad($src_file);

       if( !$im ) return false;

       if( !$width ) $width = imagesx($im);
       if( !$height ) $height = imagesy($im);

       if( $IsTrueColor && $type != "gif" ) $im2 = imagecreatetruecolor($width, $height);
       else $im2 = imagecreate($width, $height);

       if( !$type ) $type = $Extension;

       imagecopyresampled($im2, $im, 0, 0, 0, 0, $width, $height, imagesx($im), imagesy($im));

       if( $type == "gif" ) {
              imagegif($im2, $dst_file);
       }
       else if( $type == "jpg" || $type == "jpeg" ) {
              imagejpeg($im2, $dst_file, $quality);
       }
       else if( $type == "png" ) {
              imagepng($im2, $dst_file);
       }

       imagedestroy($im);
       imagedestroy($im2);

       return true;
}
?>


이미지를 줄여야 하는 처리파일이 있는경우
작성한 파일을 include 하고
GDImageResize($src_file, $dst_file, 130, 100, "jpg");

예제)
include("gd.php");
// 업로드한 파일을 image 디렉토리에 130*100으로 줄인 이미지를 m_파일이름으로 업로드한다.
GDImageResize($HTTP_POST_FILES[image_file][tmp_name], "image/m_".$HTTP_POST_FILES[image_file][name], 130, 100);

댓글목록

등록된 댓글이 없습니다.

전체 61
게시물 검색
PHP 목록
번호 제목 글쓴이 조회 날짜
61 no_profile 운영자 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 62 10-30
60 no_profile 운영자 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 89 10-19
59 no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 487 10-22
58 no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 484 05-14
57 no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 1025 02-22
56 no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 465 02-22
55 no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 537 02-22
54 no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 833 12-09
53 no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 751 09-23
52 no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 583 09-21
51 no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 706 08-29
50 no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 633 08-06
49 no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 814 01-04
48 no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 797 06-23
47 no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 850 04-07
46 no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 2019 03-19
45 no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 952 09-29
44 no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 1327 06-25
43 no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 1259 11-11
42 no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 1513 07-01