PHP Tip

웹에디터에 확장자 없는 이미지 복사해서 넣을 경우 새로고침시 이미지 깨지는 문제

깜장하마 2012. 8. 29. 11:16

확장자가 없어도 이미지가 보여지는건 데이터가 있다는 것이므로 바이너리 데이터를 보여주는 형식으로 처리

// 이미지 추출 
preg_match_all("/<img[^>]*src=[\"']?([^>\"']+)[\"']?[^>]*>/i", $row['content'], $out5); 

for($i = 0; $i < count($out5[0]); $i++){

 // base64 데이터 가져오기
 $imgBase64 = getImageData($out5[1][$i]);

 // mime type 가져오기
 $imgData = getHeader($out5[1][$i]);

 $row['content'] = str_replace($out5[0][$i], '<img src="data:'.$imgData.';base64,'.$imgBase64.'" />', $row['content']);
}

 

 

 

//함수

// 이미지 데이터를 가져와서 base64 인코딩으로 변환 후 반환
function getImageData($imgLink){

 $curl = curl_init();

 curl_setopt($curl, CURLOPT_URL, $imgLink);

 // referer는 적당히 연구해서 속일 것. 비워도 되는 경우도 있음.
 curl_setopt($curl, CURLOPT_REFERER, '');

 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

 $img = curl_exec($curl);

 curl_close($curl);

 return base64_encode($img);   

}

 


// 이미지 링크에서 이미지의 확장자를 읽어  mime type 형태로 반환
function getHeader($img){

    $extArr = array(

        'jpg' => 'image/jpg',

        'gif' => 'image/gif',

        'bmp' => 'image/bmp',

        'png' => 'image/png'

    );

    $ext = strtolower(substr($img, strrpos($img, '.')+1));

    return $extArr[$ext];

}