이미지를 작은 이미지로 변환한 문자열을 mysql에 저장하는 방법을 소개합니다.

큰 이미지를 저장하기에는 무리가 있으나 작은 이미지로 변환한 문자열을 mysql 에 저장하면 속도면에서 오히려 더 빠를 수 있습니다.

먼저 mysql 테이블을 만듭니다.


 CREATE TABLE `images` (

  `id` int(10) NOT NULL,
  `type` char(4) NOT NULL,
  `thumbs` blob NOT NULL
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8;


  <?php

 function Thumbnail_String($string$user_width=86$user_height=null)
{
    
ob_start();
    
ob_flush();
    
flush();

    
$im imagecreatefromstring$string );
    
$orig_width imagesx($im);
    
$orig_height imagesy($im);
    if(
$orig_width >= $user_width)
    {
        if(
strlen($user_height) === 0)
        {
          
$user_height = @round($orig_height*($user_width/$orig_width));
        }
    }
    else
    {
        
$user_width $orig_width;
        
$user_height $orig_height;
    }
    
$im_new imagecreatetruecolor$user_width$user_height );

    
imagecopyresampled($im_new$im0000 $user_width$user_height$orig_width$orig_height);
    
imagepng($im_new);
    
imagedestroy($im);
    
imagedestroy($im_new);

    
$data ob_get_contents();
    
ob_end_clean();
    return 
$data;
}
// 이미지를 sql에 저장하기
$file file_get_contents($_FILES['userfile']['tmp_name']);
unlink($_FILES['userfile']['tmp_name']);

$data Thumbnail_String($file50);
mysqli_query($link "insert into from tbname VALUES('1', 'png', '".$data."');");



// sql에 저장된 이미지를 불러오기
$result mysqli_query($link"select thumbs from tbname WHERE id=1;");
$row mysqli_fetch_array($resultMYSQLI_NUM);
echo 
"<img src='data:image/gif;base64, ".base64_encode($row[0])."'>";
?>

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

base64 문자열을 작은 이미지로 리사이즈한 문자열로 출력할 수 있습니다.


이렇게 하면 썸네일 이미지를 mysql에 저장할 수 있고, 또 리사이즈한 이미지를 변수에 담아 원하는 곳에 출력할 수 있습니다.


 <?php

 function Thumbnail_String($string$user_width=86$user_height=null)
{
    
ob_start();
    
ob_flush();
    
flush();
    
$im imagecreatefromstring$string );
    
$orig_width imagesx($im);
    
$orig_height imagesy($im);
    if(
$orig_width >= $user_width)
    {
        if(
strlen($user_height) === 0)
        {
          
$user_height=@round($orig_height*($user_width/$orig_width));
        }
    }
    else
    {
        
$user_width $orig_width;
        
$user_height $orig_height;
    }
    
$im_new imagecreatetruecolor$user_width$user_height );
    
imagecopyresampled($im_new$im0000,  $user_width$user_height$orig_width$orig_height);
    
imagepng($im_new);
    
imagedestroy($im);
    
imagedestroy($im_new);

    
$data ob_get_contents();
    
ob_end_clean();
    return 
$data;
}
$data64 'iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABl'
        
'BMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDr'
        
'EX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r'
        
'8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg==';
$data Thumbnail_String(base64_decode($data64), 50);
echo 
"<img src='data:image/gif;base64, ".base64_encode($data)."'>";
?>

결과:

 


블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

 <?php 
 
//  썸네일 생성함수 
 // $mime       = 1, gif 
 //               2, jpg 
 //               3, png 
 //               4, bmp 
 // $tmpfile    = 실제 존재하는 그림파일 경로 
 // $src        = 썸네일 생성할 경로 
 // $tmpsize    = 기본값, 100 
 
function thumbWrite($mime,$tmpfile,$src,$tmpsize
){ 
    if(!
file_exists($tmpfile
)){ 
        return 
false

    } 
    if(!
file_exists($src
)){ 
        return 
false

    } 
    if(!
is_int($tmpsize) || ($tmpsize 100
)){ 
         
$tmpsize 100

    } 


    
$size getimagesize($tmpfile,&$sizes
); 


    if(
$size[0] >= $size[1
]) { 
         
$x $tmpsize

         
$y = (($tmpsize $size[1])/$size[0
]); 
    } else { 
         
$y $tmpsize

         
$x = (($tmpsize $size[0])/$size[1
]); 
    } 




    if(
function_exists('imagecreatefromgif') && ($mime === 1
)) { 
        
$tmpsrc =    imagecreatefromgif($tmpfile
); 
        
$thumb  =    imagecreatetruecolor($x,$y
); 
                    
imagecopyresized(
                      $thumb,
$tmpsrc,0,0,0,0,$x,$y,
                     
imagesx($tmpsrc),imagesy($tmpsrc
)
                    ); 
                     
imagegif($thumb,$src
); 
    } elseif(
function_exists('imagecreatefromjpeg') && ($mime === 2
)) { 
        
$tmpsrc =    imagecreatefromjpeg($tmpfile
); 
        
$thumb  =    imagecreatetruecolor($x,$y
); 
                    
imagecopyresized(
                     
$thumb,$tmpsrc,0,0,0,0,$x,$y,
                      imagesx
($tmpsrc),imagesy($tmpsrc
)
                     ); 
                     
imagejpeg($thumb,$src
); 
    } elseif(
function_exists('imagecreatefrompng') && ($mime === 3
)) { 
        
$tmpsrc =    imagecreatefrompng($tmpfile
); 
        
$thumb  =    imagecreatetruecolor($x,$y
); 
                    
imagecopyresized(
                       $thumb
,$tmpsrc,0,0,0,0,$x,$y,
                       imagesx
($tmpsrc),imagesy($tmpsrc
)
                     ); 
                    
imagepng($thumb,$src
); 
    } elseif(
function_exists('imagecreatefromwbmp') && ($mime === 4
)) { 
        
$tmpsrc =    imagecreatefromwbmp($tmpfile
); 
        
$thumb  =    imagecreatetruecolor($x,$y
); 
                    
imagecopyresized(
                     
$thumb,$tmpsrc,0,0,0,0,$x,$y,
                      imagesx
($tmpsrc),imagesy($tmpsrc
)
                     ); 
                     
imagewbmp($thumb,$src
); 
    } 


    
imagedestroy($thumb
); 
    
imagedestroy($tmpsrc
); 
 } 
 
?>


블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

exif_imagetype (PHP 4 >= 4.3.0, PHP 5)

int
exif_imagetype ( string $filename )

exif_imagetype은 Value(정수)값을 출력합니다.

Value Constant
1 IMAGETYPE_GIF
2 IMAGETYPE_JPEG
3 IMAGETYPE_PNG
4 IMAGETYPE_SWF
5 IMAGETYPE_PSD
6 IMAGETYPE_BMP
7 IMAGETYPE_TIFF_II (intel byte order)
8 IMAGETYPE_TIFF_MM (motorola byte order)
9 IMAGETYPE_JPC
10 IMAGETYPE_JP2
11 IMAGETYPE_JPX
12 IMAGETYPE_JB2
13 IMAGETYPE_SWC
14 IMAGETYPE_IFF
15 IMAGETYPE_WBMP
16 IMAGETYPE_XBM

예제 (ex #1
 <?php
 $type 
exif_imagetype("test.bmp"
);
 
print_r($type); 
// 출력: 6

 // #1 예제
 
if($type == 6
)
 {
    
dir(" BMP 파일입니다. "
);
  }
 else
  {
     
// error!
  
}

 
// #2 예제
 
if($type == IMAGETYPE_BMP
)
 {
    
dir(" BMP 파일입니다. "
);
  }
 else
  {
     
// error!
  
}
 ?>

예제 (ex #2
  <?php
 if(!function_exists('exif_imagetype')) {
    function 
exif_imagetype("test.bmp") {
     list(
$w,$h,$type,$attr)=getimagesize("test.bmp",$app);
       if(
$app !== false) {
            return 
$type;
       }
    return 
false;
    }
 }
 else {
    if((
$type exif_imagetype("test.bmp")) !== false) {
        return 
$type;
     }
   return 
false;
 }
 ?>


블로그 이미지

하보니

하보니와 함께하는 phP 초보

Tag exif, MIME

댓글을 달아 주세요

재수정일: 2011/05/09 Pm 5:20

array
getimagesize ( string $filename [, array &$imageinfo ] ) (PHP 4, PHP 5)

이 함수는 이미지의 크기나 타입에 대한 정보를 출력해 주는 함수로 7개의 엘레먼트를 배열로 제공합니다. 이 함수는 자주 사용되기도 하지만 알아두면 아주 유용합니다.

예제 (ex #1
 <?php
 $size 
getimagesize("test.jpg"
);

 
print_r($size
);

 
// 출력
 
Array
 (
    [
0] => 
68
    
[1] => 
100
    
[2] => 
2
    
[3] => width="68" height=
"100"
    
[bits] => 
8
    
[channels] => 
3
    
[mime] => image/
jpeg
 
)
 
?>

배열에 대한 정보는 다음 표를 보면 알 수 있습니다.

 엘레먼트  의미
 [0]  Width값
 [1]  Height값
 [2]  Image Type Flag, 타입을 정수로 반환
 [3]  Width, Height값; ex # "width='68' height='10'"
 [bits]  비트
 [channels]  channels
 [mime]  파일 mime-type; ex # "image/jpeg"

"test.jpg" 파일 정보를 보면, 8비트인 jpg이미지로 가로 크기 68, 세로 크기가 100임을 알 수 있습니다. 여기서 엘레먼트 [2]는 다음 표의 타입을 참고로 대조해도 됩니다.

 반환 값 의미
 1 GIF
 2 JPG
 3 SWF
 4 PSD
 5 BMP
 6 TIFF(orden de bytes intel)
 7 TIFF(orden de bytes motorola)
 8 JPC
 9 JP2
 10 JPX
 11 JB2
 12 SWC
 13 IFF
 14 WBMP
 15 XBM

예제 (ex #2

 <?php
 $size 
getimagesize("rss.gif"
);

 
// 타입 1은 gif파일이므로 다음 조건문은 참입니다.
 
if($size[2] == 1
){
  echo 
"gif 파일입니다."
;
 }


 
$size getimagesize("test.bmp"
);

 
// 타입 5는 bmp파일이므로 다음 조건문은 참입니다.
 
if($size[2] == 5
){
  echo 
"bmp 파일입니다."
;
 }


 
$size getimagesize("sss.jpg"
);

 
// 타입 4는 psd파일이므로 다음 조건문은 거짓입니다.
 
if($size[2] == 5
){
  echo 
"bmp 파일입니다."
;
 }
 
?>


예제 (ex #3
 <?php
 $imgurl 
"test.bmp"
;
 list(
$width$height$type$attr) = getimagesize($imgurl
);

 
// $attr는 엘레먼트 [3]입니다.
 
echo "<img src='${imgurl}' ${attr} alt='getimagesize() example' />"
;

 
// 결과: <img src='test.bmp' width="182" height="220"
           alt='getimagesize() example' />
 
?>

다음은 URL를 이용한 예제입니다.

예제 (ex #4

 <?php
 $size 
getimagesize("http://kr2.php.net/images/php.gif"
);
 
print_r($size
);

 
/*
 결과: 
 Array
 (
    [0] => 120
    [1] => 67
    [2] => 1
    [3] => width="120" height="67"
    [bits] => 7
    [channels] => 3
    [mime] => image/gif
 )
 */


 
$size getimagesize("http://main2.nateimg.co.kr/img/cms/
                                  content_pool/2011/05/L_02(3).jpg"); 

 print_r($size);

 
/*
 결과:
 Array
 (
    [0] => 105
    [1] => 70
    [2] => 2
    [3] => width="105" height="70"
    [bits] => 8
    [channels] => 3
    [mime] => image/jpeg
 )
 */
 
?> 


다음 fopen함수를 이용한 이미지 출력입니다.

예제 (ex #5
 <?php
 $file 
"test.bmp"
;
 
$size getimagesize($file
);
 
$fp fopen($file"rb"
);
 if (
$size && $fp
) {
    
header("Content-type: ".$size['mime'
]);
    
fpassthru($fp
);
    exit;
 }
 
?>


블로그 이미지

하보니

하보니와 함께하는 phP 초보

Tag MIME

댓글을 달아 주세요