ميشه طول و عرض عكس رو به يه عدد ثابت تقسيم كرد
با سلام، بايد پهناي تصوير رو بر ارتفاعش تقسيم كنيد. اينطوري عددي بدست مياد كه اصطلاحاً بهش ميگن Ratio و حالا هر موقع خواستيد تصوير رو تغيير اندازه بدين، براي اينكه طول و عرض مناسب داشته باشيد، اگه ارتفاع مشخص باشه، در اين عدد ضرب كنيد تا پهنا بدست بياد و اگه پهنا مشخص باشه، بر اين عدد تقسيم كنيد تا ارتفاع بدست بياد.من به دنبال یه فرمول ریاضی تعریف شده می گردم که بتونه از ابعاد تصویر رو به شکل متناظر تغییر بده.
با سلام، بايد پهناي تصوير رو بر ارتفاعش تقسيم كنيد. اينطوري عددي بدست مياد كه اصطلاحاً بهش ميگن ratio و حالا هر موقع خواستيد تصوير رو تغيير اندازه بدين، براي اينكه طول و عرض مناسب داشته باشيد، اگه ارتفاع مشخص باشه، در اين عدد ضرب كنيد تا پهنا بدست بياد و اگه پهنا مشخص باشه، بر اين عدد تقسيم كنيد تا ارتفاع بدست بياد.
اگه باز هم سؤالي بود در خدمتم.
موفق و مؤيد باشيد.
با سلام، خوب وقتي هم طول و هم عرض مشخصه، دو راه بيشتر نداريد:لطفا بیشتر توضیح بدید.
من یه تصویر با ابعاد مشخص دارم، حالا ابعاد جدیدی به اسکریپت می دم که ابعاد تصویر رو تغییر بده. در این حالت هم پهنا و هم ارتفاع تصویر مشخص هست. در این حالت چیکار باید کنم؟
با سلام، خوب وقتي هم طول و هم عرض مشخصه، دو راه بيشتر نداريد:
1- يكي از پارامترهاي پهنا و ارتفاع رو (برحسب اينكه كدوم يكي بيشتره و درواقع تصويرتون portrait هست يا landscape) ناديده بگيريد و اون رو طبق فرمولي كه گفتم محاسبه كنيد. اينطوري تصوير به شكل درست تغيير اندازه داده ميشه ولي با ابعادي كه مشخص شده كمي تفاوت داره.
2- از همون ابعاد استفاده كنيد ولي كارهاي زير رو انجام بديد: ابتدا پارامتري كه با اندازه مناسب مغايرت داره رو درنظر بگيريد و تفاوت اون رو با اندازه مناسب محاسبه كنيد و تقسيم بر دو كنيد. حالا به اندازه اين عدد، حاشيه سفيد (يا هر رنگ دلخواه ديگه) قبل و بعد از تصوير اضافه كنيد.
اگه باز هم توضيح بيشتري خواستيد، بفرماييد تا براتون يك نمونه بگذارم. البته اين رو هم بگم كه معمولاً روش اول استفاده ميشه يعني تصوير پيش نمايش نسبتهاي تصوير اصلي رو كاملاً حفظ ميكنه.
موفق و مؤيد باشيد.
<?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% کارت رو را میندازه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)); ?>
<img src='resizer.php?pic=image.jpg&w=110'>