JAVASCRIPT + PHP 새창에 이미지 주소 노출 없이 뿌리기
JAVASCRIPT + PHP 새창에 이미지 주소 노출 없이 뿌리기
이미지의 경로 노출을 꺼릴 경우에 사용하면 된다.
이미지주소를 감추는 대신에 PHP 소스 주소는 노출된다는 것을 알아야 한다.
image header 출력방법과 img 태그에 data:image/jpeg;base64 방법에 대해서 알아보자.
JAVASCRIPT 소스
function action_imageView(url) {
var imageViewWindow = window.open("", "_image_view_", "width=300, height=300");
var htmlStr = "<form name='imageViewForm' action='image_view.php' method='post'>";
htmlStr += "<input type='hidden' name='url' value='"+url+"'>";
htmlStr += "</form>";
imageViewWindow.document.write(htmlStr);
imageViewWindow.document.imageViewForm.submit();
}
PHP 소스
<?
if($_POST['url'] && file_exists($_POST['url'])) {
$IMAGE_PATH = $_POST['url'];
$IMAGE_TYPE = strtolower(substr($IMAGE_PATH, strlen($IMAGE_PATH)-3, 3));
$createImageFunc = array(
"bmp"=>"imagecreatefromwbmp",
"gif"=>"imagecreatefromgif",
"jpg"=>"imagecreatefromjpeg",
"png"=>"imagecreatefrompng"
);
$ContentTypes = array(
"bmp"=>"Content-type:image/vnd.wap.wbmp",
"gif"=>"Content-type:image/gif",
"jpg"=>"Content-type:image/jpeg",
"png"=>"Content-type:image/png"
);
$ContentFuncs = array(
"bmp"=>"imagewbmp",
"gif"=>"imagegif",
"jpg"=>"imagejpeg",
"png"=>"imagepng"
);
if($createImageFunc[$IMAGE_TYPE]) $image = $createImageFunc[$IMAGE_TYPE]($IMAGE_PATH);
if($image) {
header($ContentTypes[$IMAGE_TYPE]);
$ContentFuncs[$IMAGE_TYPE]($image);
imagedestroy($image);
}
}
?>
IF 조건문 없이 하려다보니 함수포인터를 사용하게 되었다.
PHP 소스 ( 다른 방법 )
<?
if($_POST['url'] && file_exists($_POST['url'])) {
$IMAGE_PATH = $_POST['url'];
list($IMAGE_W, $IMAGE_H, $IMAGE_TYPE) = getimagesize($IMAGE_PATH);
switch ($IMAGE_TYPE) {
case 1: $image = imagecreatefromgif($IMAGE_PATH); break;
case 2: $image = imagecreatefromjpeg($IMAGE_PATH); break;
case 3: $image = imagecreatefrompng($IMAGE_PATH); break;
case 15: $image = imagecreatefromwbmp($IMAGE_PATH); break;
default: return '';
}
ob_start();
imagejpeg( $image, NULL, 100 );
imagedestroy( $image );
$iraw = ob_get_clean();
echo "<img src='data:image/jpeg;base64,".base64_encode($iraw)."'>";
}
?>
이번에는 img 태그에 data:image/jpeg;base64 로 표현하는 방법이다.
또다른 방법 보기 http://itrooms.tistory.com/356