نسبت طول عرض تصویر برای تغییر اندازه

phpweb

Active Member
من می خوام یه اسکریپت تغییر اندازه تصویر بنویسم، چطور باید کاری کنم که ابعاد تصویر به نسبت مناسب تغییر کنن تا ابعاد تصویر به خوبی تغییر کنن؟

رابطه ریاضی مضخصی در این مورد وجود داره؟
 

MMSHFE

Active Member
من به دنبال یه فرمول ریاضی تعریف شده می گردم که بتونه از ابعاد تصویر رو به شکل متناظر تغییر بده.
با سلام، بايد پهناي تصوير رو بر ارتفاعش تقسيم كنيد. اينطوري عددي بدست مياد كه اصطلاحاً بهش ميگن Ratio و حالا هر موقع خواستيد تصوير رو تغيير اندازه بدين، براي اينكه طول و عرض مناسب داشته باشيد، اگه ارتفاع مشخص باشه، در اين عدد ضرب كنيد تا پهنا بدست بياد و اگه پهنا مشخص باشه، بر اين عدد تقسيم كنيد تا ارتفاع بدست بياد.
اگه باز هم سؤالي بود در خدمتم.
موفق و مؤيد باشيد.
 

phpweb

Active Member
با سلام، بايد پهناي تصوير رو بر ارتفاعش تقسيم كنيد. اينطوري عددي بدست مياد كه اصطلاحاً بهش ميگن ratio و حالا هر موقع خواستيد تصوير رو تغيير اندازه بدين، براي اينكه طول و عرض مناسب داشته باشيد، اگه ارتفاع مشخص باشه، در اين عدد ضرب كنيد تا پهنا بدست بياد و اگه پهنا مشخص باشه، بر اين عدد تقسيم كنيد تا ارتفاع بدست بياد.
اگه باز هم سؤالي بود در خدمتم.
موفق و مؤيد باشيد.

لطفا بیشتر توضیح بدید.

من یه تصویر با ابعاد مشخص دارم، حالا ابعاد جدیدی به اسکریپت می دم که ابعاد تصویر رو تغییر بده. در این حالت هم پهنا و هم ارتفاع تصویر مشخص هست. در این حالت چیکار باید کنم؟
 
آخرین ویرایش:

MMSHFE

Active Member
لطفا بیشتر توضیح بدید.

من یه تصویر با ابعاد مشخص دارم، حالا ابعاد جدیدی به اسکریپت می دم که ابعاد تصویر رو تغییر بده. در این حالت هم پهنا و هم ارتفاع تصویر مشخص هست. در این حالت چیکار باید کنم؟
با سلام، خوب وقتي هم طول و هم عرض مشخصه، دو راه بيشتر نداريد:
1- يكي از پارامترهاي پهنا و ارتفاع رو (برحسب اينكه كدوم يكي بيشتره و درواقع تصويرتون Portrait هست يا Landscape) ناديده بگيريد و اون رو طبق فرمولي كه گفتم محاسبه كنيد. اينطوري تصوير به شكل درست تغيير اندازه داده ميشه ولي با ابعادي كه مشخص شده كمي تفاوت داره.
2- از همون ابعاد استفاده كنيد ولي كارهاي زير رو انجام بديد: ابتدا پارامتري كه با اندازه مناسب مغايرت داره رو درنظر بگيريد و تفاوت اون رو با اندازه مناسب محاسبه كنيد و تقسيم بر دو كنيد. حالا به اندازه اين عدد، حاشيه سفيد (يا هر رنگ دلخواه ديگه) قبل و بعد از تصوير اضافه كنيد.
اگه باز هم توضيح بيشتري خواستيد، بفرماييد تا براتون يك نمونه بگذارم. البته اين رو هم بگم كه معمولاً روش اول استفاده ميشه يعني تصوير پيش نمايش نسبتهاي تصوير اصلي رو كاملاً حفظ ميكنه.
موفق و مؤيد باشيد.
 

phpweb

Active Member
با سلام، خوب وقتي هم طول و هم عرض مشخصه، دو راه بيشتر نداريد:
1- يكي از پارامترهاي پهنا و ارتفاع رو (برحسب اينكه كدوم يكي بيشتره و درواقع تصويرتون portrait هست يا landscape) ناديده بگيريد و اون رو طبق فرمولي كه گفتم محاسبه كنيد. اينطوري تصوير به شكل درست تغيير اندازه داده ميشه ولي با ابعادي كه مشخص شده كمي تفاوت داره.
2- از همون ابعاد استفاده كنيد ولي كارهاي زير رو انجام بديد: ابتدا پارامتري كه با اندازه مناسب مغايرت داره رو درنظر بگيريد و تفاوت اون رو با اندازه مناسب محاسبه كنيد و تقسيم بر دو كنيد. حالا به اندازه اين عدد، حاشيه سفيد (يا هر رنگ دلخواه ديگه) قبل و بعد از تصوير اضافه كنيد.
اگه باز هم توضيح بيشتري خواستيد، بفرماييد تا براتون يك نمونه بگذارم. البته اين رو هم بگم كه معمولاً روش اول استفاده ميشه يعني تصوير پيش نمايش نسبتهاي تصوير اصلي رو كاملاً حفظ ميكنه.
موفق و مؤيد باشيد.


لطفا با مثال توضیح بدید.
 

meysam-fathi

Active Member
PHP:
<?php
    class ImageResizer{
        public function resize_image($strFilePath,$intWidth,$intHeight,$strSaveTo = false,$blnCrop = true){
            session_start();
            if (CAN_MOD_INI) ini_set('memory_limit', '100M');
            $imgSource = $this->open_image($strFilePath);
            list($intSrcWidth, $intSrcHeight) = getimagesize($strFilePath);
            list($intNewWidth, $intNewHeight) = $this->calculate_image_sizes($intSrcWidth,$intSrcHeight,$intWidth,$intHeight);

            $intSrcY = 0;
            if($blnCrop and $intNewWidth == $intWidth and $intNewHeight == $intHeight){
                $temp = $intSrcHeight;
                @$intSrcHeight = (int) ($intNewHeight * $intSrcWidth / $intNewWidth);
                $intSrcY = (int)(($temp - $intSrcHeight)/3);
                $intSrcHeight += $intSrcY;
            }
            $imgDest = @imagecreatetruecolor($intNewWidth,$intNewHeight);
            @imagecopyresampled($imgDest,$imgSource,0,0,0,$intSrcY,$intNewWidth,$intNewHeight,$intSrcWidth,$intSrcHeight);
            $this->output_image($imgDest,$strFilePath,$strSaveTo);
            @imagedestroy($imgDest);
            @imagedestroy($imgSource);
        }
        
        private function output_image($imgImage,$strDestPath,$strSaveTo = false)
        {
            $arrFileParts = $this->filename_parts($strDestPath);
            $strFileExt = strtolower($arrFileParts['file_ext']);
            switch($strFileExt)
            {
                case "gif":
                    if(!$strSaveTo) header("Content-type: image/gif");
                    if($strSaveTo)
                        @imagegif($imgImage,$strSaveTo);
                    else
                        @imagegif($imgImage);
                    break;
                case "png":
                    if(!$strSaveTo) header("Content-type: image/png");
                    if($strSaveTo)
                        @imagepng($imgImage,$strSaveTo);
                    else
                        @imagegif($imgImage);
                    break;
                case "bmp":
                    if(!$strSaveTo) header("Content-type: image/vnd.wap.wbmp");
                    if($strSaveTo)
                        @imagewbmp($imgImage,$strSaveTo);
                    else
                        @imagegif($imgImage);
                    break;
                default:
                    if(!$strSaveTo) header("Content-type: image/jpeg");
                    if($strSaveTo)
                        @imagejpeg($imgImage,$strSaveTo);
                    else
                        @imagegif($imgImage);
            }
        }
        
        private function calculate_image_sizes($intOldWidth,$intOldHeight,$intNewWidth,$intNewHeight)
        {
            if($intNewWidth == 0 and $intNewHeight == 0)
            {
                $intNewWidth = $intOldWidth;
                $intNewHeight = $intOldHeight;
            }
            elseif($intNewHeight == 0)
                @$intNewHeight = (int) ($intOldHeight * $intNewWidth / $intOldWidth);
            elseif($intNewWidth == 0)
                @$intNewWidth = (int) ($intOldWidth * $intNewHeight / $intOldHeight);
            
            return array($intNewWidth,$intNewHeight);
        }
        
        private function open_image($strFilePath)
        {
            $arrFileParts = $this->filename_parts($strFilePath);
            $strFileExt = strtolower($arrFileParts['file_ext']);
            switch($strFileExt)
            {
                case "gif":
                    @$imgImage = imagecreatefromgif($strFilePath);
                    break;
                case "png":
                    @$imgImage = imagecreatefrompng($strFilePath);
                    break;
                case "bmp":
                    @$imgImage = imagecreatefromwbmp($strFilePath);
                    break;
                default:
                    @$imgImage = imagecreatefromjpeg($strFilePath);
            }
            
            return $imgImage;
        }
        
        public function filename_parts($strFileName)
        {
            $arrDirs = explode("/",$strFileName);
            $strFileName = $arrDirs[count($arrDirs)-1];
            unset($arrDirs[count($arrDirs)-1]);
            $strPath = implode("/",$arrDirs);
            $arrTemp = explode(".",$strFileName);
            $strFileExt = $arrTemp[count($arrTemp)-1];
            unset($arrTemp[count($arrTemp)-1]);
            $strFileName = implode(".",$arrTemp);
            
            $arrParts = array(    "path"=>$strPath,
                                "file_name"=>$strFileName,
                                "file_ext"=>$strFileExt);
            return $arrParts;
        }
    }
    
    $objImageResizer = new ImageResizer;
    $objImageResizer->resize_image($_GET['pic'],(($_GET['w']!='')? $_GET['w'] : 0),(($_GET['h']!='')? $_GET['h'] : 0),'',(($_GET['crop']!='')? true:false));
?>
100% کارت رو را میندازه
<img src='resizer.php?pic=image.jpg&w=110'>
 
آخرین ویرایش:

phpweb

Active Member
PHP:
<?php
    class imageresizer{
        public function resize_image($strfilepath,$intwidth,$intheight,$strsaveto = false,$blncrop = true){
            session_start();
            if (can_mod_ini) ini_set('memory_limit', '100m');
            $imgsource = $this->open_image($strfilepath);
            list($intsrcwidth, $intsrcheight) = getimagesize($strfilepath);
            list($intnewwidth, $intnewheight) = $this->calculate_image_sizes($intsrcwidth,$intsrcheight,$intwidth,$intheight);

            $intsrcy = 0;
            if($blncrop and $intnewwidth == $intwidth and $intnewheight == $intheight){
                $temp = $intsrcheight;
                @$intsrcheight = (int) ($intnewheight * $intsrcwidth / $intnewwidth);
                $intsrcy = (int)(($temp - $intsrcheight)/3);
                $intsrcheight += $intsrcy;
            }
            $imgdest = @imagecreatetruecolor($intnewwidth,$intnewheight);
            @imagecopyresampled($imgdest,$imgsource,0,0,0,$intsrcy,$intnewwidth,$intnewheight,$intsrcwidth,$intsrcheight);
            $this->output_image($imgdest,$strfilepath,$strsaveto);
            @imagedestroy($imgdest);
            @imagedestroy($imgsource);
        }
        
        private function output_image($imgimage,$strdestpath,$strsaveto = false)
        {
            $arrfileparts = $this->filename_parts($strdestpath);
            $strfileext = strtolower($arrfileparts['file_ext']);
            switch($strfileext)
            {
                case "gif":
                    If(!$strsaveto) header("content-type: Image/gif");
                    if($strsaveto)
                        @imagegif($imgimage,$strsaveto);
                    else
                        @imagegif($imgimage);
                    break;
                case "png":
                    If(!$strsaveto) header("content-type: Image/png");
                    if($strsaveto)
                        @imagepng($imgimage,$strsaveto);
                    else
                        @imagegif($imgimage);
                    break;
                case "bmp":
                    If(!$strsaveto) header("content-type: Image/vnd.wap.wbmp");
                    if($strsaveto)
                        @imagewbmp($imgimage,$strsaveto);
                    else
                        @imagegif($imgimage);
                    break;
                default:
                    If(!$strsaveto) header("content-type: Image/jpeg");
                    if($strsaveto)
                        @imagejpeg($imgimage,$strsaveto);
                    else
                        @imagegif($imgimage);
            }
        }
        
        private function calculate_image_sizes($intoldwidth,$intoldheight,$intnewwidth,$intnewheight)
        {
            if($intnewwidth == 0 and $intnewheight == 0)
            {
                $intnewwidth = $intoldwidth;
                $intnewheight = $intoldheight;
            }
            elseif($intnewheight == 0)
                @$intnewheight = (int) ($intoldheight * $intnewwidth / $intoldwidth);
            elseif($intnewwidth == 0)
                @$intnewwidth = (int) ($intoldwidth * $intnewheight / $intoldheight);
            
            return array($intnewwidth,$intnewheight);
        }
        
        private function open_image($strfilepath)
        {
            $arrfileparts = $this->filename_parts($strfilepath);
            $strfileext = strtolower($arrfileparts['file_ext']);
            switch($strfileext)
            {
                case "gif":
                    @$imgimage = imagecreatefromgif($strfilepath);
                    break;
                case "png":
                    @$imgimage = imagecreatefrompng($strfilepath);
                    break;
                case "bmp":
                    @$imgimage = imagecreatefromwbmp($strfilepath);
                    break;
                default:
                    @$imgimage = imagecreatefromjpeg($strfilepath);
            }
            
            return $imgimage;
        }
        
        public function filename_parts($strfilename)
        {
            $arrdirs = explode("/",$strfilename);
            $strfilename = $arrdirs[count($arrdirs)-1];
            unset($arrdirs[count($arrdirs)-1]);
            $strpath = implode("/",$arrdirs);
            $arrtemp = explode(".",$strfilename);
            $strfileext = $arrtemp[count($arrtemp)-1];
            unset($arrtemp[count($arrtemp)-1]);
            $strfilename = implode(".",$arrtemp);
            
            $arrparts = array(    "path"=>$strpath,
                                "file_name"=>$strfilename,
                                "file_ext"=>$strfileext);
            return $arrparts;
        }
    }
    
    $objimageresizer = new imageresizer;
    $objimageresizer->resize_image($_get['pic'],(($_get['w']!='')? $_get['w'] : 0),(($_get['h']!='')? $_get['h'] : 0),'',(($_get['crop']!='')? True:false));
?>
100% کارت رو را میندازه
<img src='resizer.php?pic=image.jpg&w=110'>

اسکریپت آماده دارم، می خوام بدونم چه فرمولی باید برای ریسایز کردن تصاویر بکار ببرم.
 

جدیدترین ارسال ها

بالا