B

명랑폐인님의 다중갤러리 이미지 가로 세로 비율 문제


명랑폐인님의 다중 갤러리에서 이미지들이 일괄적으로 가로 세로 비율이 같은데...
이걸 실제 등록 이미지 비율대로 처리하려면 어딜 손대야하나요..?
썸네일 이미지도 실제 이미지 비율로... 그리고 큰 이미지도...
그러면 생겨지는 나머지 부분은 흰색 배경이나 유색 배경 해도 됩니다.
무조건 실제 이미지 비율이 필요합니다만... 어디를 고쳐야는지..

<해당 코드>

        <?

            function UnsharpMask($img, $amount, $radius, $threshold) {
           

           
            // Attempt to calibrate the parameters to Photoshop:
            if ($amount > 500) $amount = 500;
            $amount = $amount * 0.016;
            if ($radius > 50) $radius = 50;
            $radius = $radius * 2;
            if ($threshold > 255) $threshold = 255;
   
            $radius = abs(round($radius));     // Only integers make sense.
            if ($radius == 0) {    return $img; imagedestroy($img); break;    }
            $w = imagesx($img); $h = imagesy($img);
            $imgCanvas = $img;
            $imgCanvas2 = $img;
            $imgBlur = imagecreatetruecolor($w, $h);
   
            // Gaussian blur matrix:
            //    1    2    1       
            //    2    4    2       
            //    1    2    1       

            // Move copies of the image around one pixel at the time and merge them with weight
            // according to the matrix. The same matrix is simply repeated for higher radii.
            for ($i = 0; $i < $radius; $i++)
                {
                imagecopy      ($imgBlur, $imgCanvas, 0, 0, 1, 1, $w - 1, $h - 1); // up left
                imagecopymerge ($imgBlur, $imgCanvas, 1, 1, 0, 0, $w, $h, 50); // down right
                imagecopymerge ($imgBlur, $imgCanvas, 0, 1, 1, 0, $w - 1, $h, 33.33333); // down left
                imagecopymerge ($imgBlur, $imgCanvas, 1, 0, 0, 1, $w, $h - 1, 25); // up right
                imagecopymerge ($imgBlur, $imgCanvas, 0, 0, 1, 0, $w - 1, $h, 33.33333); // left
                imagecopymerge ($imgBlur, $imgCanvas, 1, 0, 0, 0, $w, $h, 25); // right
                imagecopymerge ($imgBlur, $imgCanvas, 0, 0, 0, 1, $w, $h - 1, 20 ); // up
                imagecopymerge ($imgBlur, $imgCanvas, 0, 1, 0, 0, $w, $h, 16.666667); // down
                imagecopymerge ($imgBlur, $imgCanvas, 0, 0, 0, 0, $w, $h, 50); // center
                }
            $imgCanvas = $imgBlur;   
               
            // Calculate the difference between the blurred pixels and the original
            // and set the pixels
            for ($x = 0; $x < $w; $x++)
                { // each row
                for ($y = 0; $y < $h; $y++)
                    { // each pixel
                    $rgbOrig = ImageColorAt($imgCanvas2, $x, $y);
                    $rOrig = (($rgbOrig >> 16) & 0xFF);
                    $gOrig = (($rgbOrig >> 8) & 0xFF);
                    $bOrig = ($rgbOrig & 0xFF);
                    $rgbBlur = ImageColorAt($imgCanvas, $x, $y);
                    $rBlur = (($rgbBlur >> 16) & 0xFF);
                    $gBlur = (($rgbBlur >> 8) & 0xFF);
                    $bBlur = ($rgbBlur & 0xFF);

                    // When the masked pixels differ less from the original
                    // than the threshold specifies, they are set to their original value.
                    $rNew = (abs($rOrig - $rBlur) >= $threshold) ? max(0, min(255, ($amount * ($rOrig - $rBlur)) + $rOrig)) : $rOrig;
                    $gNew = (abs($gOrig - $gBlur) >= $threshold) ? max(0, min(255, ($amount * ($gOrig - $gBlur)) + $gOrig)) : $gOrig;
                    $bNew = (abs($bOrig - $bBlur) >= $threshold) ? max(0, min(255, ($amount * ($bOrig - $bBlur)) + $bOrig)) : $bOrig;
                   
                    if (($rOrig != $rNew) || ($gOrig != $gNew) || ($bOrig != $bNew))
                        {
                        $pixCol = ImageColorAllocate($img, $rNew, $gNew, $bNew);
                        ImageSetPixel($img, $x, $y, $pixCol);
                        }
                    }
                }
            return $img;
            }
   
        ?>
        <?
            //썸네일 코드 시작
            $data_path = $g4['path'] . "/data/file/{$bo_table}";//라이브러리 파일 참조
            $thumb_path = $data_path . '/thumbOpen';
            $thumb_path2 = $data_path . '/thumbOpen2';
        ?>


           
            <SCRIPT LANGUAGE='JavaScript'>
            // 이미지뷰어
            <!--
            var win= null;
            function View_Open(img, w, h)
            {
                var winl = (screen.width-w)/2;
                var wint = (screen.height-h)/3;
                var settings  ='height='+h+',';
                    settings +='width='+w+',';
                    settings +='top='+wint+',';
                    settings +='left='+winl+',';
                    settings +='scrollbars=yes,';
                    settings +='resizable=yes,';
                    settings +='status=no';

                win=window.open("","newWindow",settings);
                win.document.open();
                win.document.write ("<html><head><title>원본 이미지 보기</title></head>");
                win.document.write ("<script>function init(){window.resizeBy(document.all.pop_img.width-document.body.clientWidth, document.all.pop_img.height-document.body.clientHeight+10);}</script>");
                win.document.write ("<body bgcolor=white topmargin=0 leftmargin=0 marginwidth=0 marginheight=0 oncontextmenu='return false' ondragstart='return false' onkeydown='return false' onselectstart='return false' onload='init();'>");
                win.document.write ("<img src='"+img+"' border=0 onclick='window.close();' style='cursor:hand' title='클릭하면 닫혀요' id='pop_img'>");
                win.document.write ("</body></html>");
                win.document.close();
            }
        //-->
        </SCRIPT>

        <SCRIPT LANGUAGE="JavaScript">
        <!--
        image_directory = "";   //배경이미지 경로
        clear = new Image();  clear.src = image_directory + "./img/blank.gif";
        <?
        //파일 뽑기
        $sql2 = " select bf_file from $g4[board_file_table] where bo_table = '$bo_table' and wr_id = '$wr_id' order by bf_no limit 0, 12 ";
        $result2 = sql_query($sql2);
        for ($j=0; $row2 = sql_fetch_array($result2); $j++) {
            if($j==0) $view_one = "{$thumb_path2}/{$row2['bf_file']}";
        }
        ?>
       

        //  -->
        </SCRIPT>

        <table cellspacing="0" cellpadding="0" border="0" align="left">

            <tr>
           
       
            <td  style="padding:4 0 10 0px;border:1px solid #D4DBE1;" width="540" height="400" align="center" valign="top" bgcolor=white>
              <div style='width:540px;position:relative; overflow:hidden;' align="center" id="loadarea"><img src="<?=$view_one?>"   border="0"></div>
            </td>
            <td width="10"></td>
               
           
            <td style="padding:4 0 10 0px;border:1px solid #D4DBE1;" width="160" height="450" align="center" valign="top">
                <!--작은사진목록-->   
                <table border="0" cellpadding="0" cellspacing="0" width="100%" valign='top'>
                <tr>
                    <td style="border:solid 1px #D3D3D3; background-color:#E5E5E5; height:385px;" valign='top'>
                        <table border="0" cellpadding="0" cellspacing="0">
   
                        <tr>
               
                         <?
                        //파일 뽑기
                        $sql = " select bf_file, bf_source from $g4[board_file_table] where bo_table = '$bo_table' and wr_id = '$wr_id' order by bf_no limit 0, 12 ";
                        $result = sql_query($sql);
                        for ($i=0; $row = sql_fetch_array($result); $i++) {

                           
                            if($i != 0 && $i % 2 == 0) echo "</tr><tr>";

                            $view_w = 540; //썸네일 가로사이즈
                            $view_h = 400; //썸네일 세로사이즈
                            $sch_q = 100; //썸네일 퀼리티

                            if (!is_dir($thumb_path2)) {
                                @mkdir($thumb_path2, 0707);
                                @chmod($thumb_path2, 0707);
                               
                            }

                            if (!is_dir($thumb_path)) {
                                @mkdir($thumb_path, 0707);
                                @chmod($thumb_path, 0707);
                               
                            }

                            $filename = $row[bf_file]; //파일명
                            $thumb2 = $thumb_path2.'/'.$filename; //썸네일
                       
                            if (!file_exists($thumb2)) { //view 용 이미지 생성

                                $file = $data_path.'/'.$filename; //원본
                                if (preg_match("/\.(jp[e]?g|gif|png)$/i", $file) && file_exists($file)) {
                                    $size = getimagesize($file);
                                    if ($size[2] == 1)
                                        $src = imagecreatefromgif($file);
                                    else if ($size[2] == 2)
                                        $src = imagecreatefromjpeg($file);
                                    else if ($size[2] == 3)
                                        $src = imagecreatefrompng($file);
                                    else
                                        continue;

                                    $rate = $view_h / $size[1];
                                    //$width = (int)($size[0] * $rate);
                                    $width = 540; //가로 사이즈 고정
                                   
                                    //echo "rate : $rate ,width : $width, $height : $board[bo_2] <br>";
                                    if($width <= $view_w) { //width가 지정된 사이즈보다 작을경우 rate 비율로 썸네일 생성
                                        $dst = imagecreatetruecolor($width, $view_h);
                                        imagecopyresampled($dst, $src, 0, 0, 0, 0, $width, $view_h, $size[0], $size[1]);
                                        imagepng($dst, $thumb_path2.'/'.$filename, $sch_q);
                                    } else {
                                        $rate = $view_w / $size[0];
                                        $height = (int)($size[1] * $rate);

                                        $dst = imagecreatetruecolor($view_w, $height);
                                        imagecopyresampled($dst, $src, 0, 0, 0, 0, $view_w, $height, $size[0], $size[1]);
                                        imagepng($dst, $thumb_path2.'/'.$filename, $sch_q);
                                    }
                                    chmod($thumb_path2.'/'.$filename, 0707);
                                }

                            }
                           
                            $view_w = 88; //썸네일 가로사이즈
                            $view_h = 66; //썸네일 세로사이즈
                            $thumb = $thumb_path.'/'.$filename; //썸네일
                            if (!file_exists($thumb)) { //기본 썸네일

                                $file = $data_path.'/'.$filename; //원본
                                if (preg_match("/\.(jp[e]?g|gif|png)$/i", $file) && file_exists($file)) {
                                    $size = getimagesize($file);
                                    if ($size[2] == 1)
                                        $src = imagecreatefromgif($file);
                                    else if ($size[2] == 2)
                                        $src = imagecreatefromjpeg($file);
                                    else if ($size[2] == 3)
                                        $src = imagecreatefrompng($file);
                                    else
                                        continue;

                                    $rate = $view_h / $size[1];
                                    //$width = (int)($size[0] * $rate);
                                    $width = 88; //사이즈를고정한다.
                                   
                                    //echo "rate : $rate ,width : $width, $height : $board[bo_2] <br>";
                                    if($width <= $view_w) { //width가 지정된 사이즈보다 작을경우 rate 비율로 썸네일 생성
                                        $dst = imagecreatetruecolor($width, $view_h);
                                        imagecopyresampled($dst, $src, 0, 0, 0, 0, $width, $view_h, $size[0], $size[1]);
                                        $dst = UnsharpMask($dst, 80, 0.5, 3);
                                        imagepng($dst, $thumb_path.'/'.$filename, $sch_q);
                                    } else {
                                        $rate = $view_w / $size[0];
                                        $height = (int)($size[1] * $rate);
                                        $dst = imagecreatetruecolor($view_w, $height);
                                        imagecopyresampled($dst, $src, 0, 0, 0, 0, $view_w, $height, $size[0], $size[1]);
                                        $dst = UnsharpMask($dst, 80, 0.5, 3);
                                        imagepng($dst, $thumb_path.'/'.$filename, $sch_q);
                                    }
                                    chmod($thumb_path.'/'.$filename, 0707);
                                }

                            }

                            if (file_exists($thumb) && $filename) {
                            ?>

                              <td style="border:solid 1px #D0D0D0;height:66px;width:88px;">
                                    <a rel="enlargeimage::mouseover" rev="loadarea" href="<?=$thumb_path2?>/<?=$filename?>"><img src="<?=$thumb?>" style="border-width:0px;" /></a>
                              </td>
                               
                             
                            <?
                            //onMouseOut="bgChange('clear');"
                                }
                            }
                            ?>
                            </table>
                        </td>
                    </tr>
                    </table>
                <!--작은사진목록-->
                </td>
            </tr>
          </table>
          <!--사진테이블-->

|

댓글 2개

$view_w = 88; //썸네일 가로사이즈
$view_h = 66; //썸네일 세로사이즈

위 썸네일 사이즈를 지정하는 부분을 다음과 같이 바꾸면 어떨까요?

$view_w = 88; //썸네일 가로사이즈
if($size) $view_h = $size[1]/$size[0]*88; //썸네일 세로사이즈
else $view_h = 66;
말러님 언급과 더불어..

//$width = (int)($size[0] * $rate);
$width = 540; //가로 사이즈 고정

이것도 체킹해보셔야겠네요.
가로 사이즈 고정 시 세로 길이가 길어지는데.. 세로 길이 고정으로 잡을 지 여부 등등도..
상단의 // 빼시고 하단에 주석 처리해보시고 테스트 해보세요..

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기
🐛 버그신고