업로드 이미지 크기 조절해서 저장하기
페이지 정보
작성자 오원장쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 댓글 0건 조회 4,581회 작성일 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);
대략 한 리스트에서 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);
관련링크
댓글목록
등록된 댓글이 없습니다.