pedia-learning

ورود

گذرواژه‌تان را فراموش کرده‌اید؟

ثبت نام

ثبت نام
انجمن عمومی گسترش فناوری آگو

اگر اولین بار از انجمن بازدید می کنید برای دسترسی کامل به انجمن عضو شوید بعد عضویت قادر به ارسال مطلب و شرکت در بحث خواهید داشت

ارسال پاسخ 
 
امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
تغییر اندازه تصاویر بوسیله php
12-03-2013, 03:13 PM
ارسال: #1
تغییر اندازه تصاویر بوسیله php
برای کوچک کردن تصاویر و تبدیل اندازه آن به مقیاس دلخواه راهکارهای زیادی وجود داره ولی در این بخش کلاسی از php را برای شما معرفی می کنم که به راحتی می توان اندازه تصاویر را تغییر داد , خوب بریم سر کد کلاس

کد php:
Class resize
{
// *** Class variables
private $image;
private 
$width;
private 
$height;
private 
$imageResized;

function 
__construct($fileName)
{
// *** Open up the file
$this->image $this->openImage($fileName);

// *** Get width and height
$this->width imagesx($this->image);
$this->height imagesy($this->image);
}

## --------------------------------------------------------

private function openImage($file)
{
// *** Get extension
$extension strtolower(strrchr($file'.'));

switch(
$extension)
{
case 
'.jpg':
case 
'.jpeg':
$img = @imagecreatefromjpeg($file);
break;
case 
'.gif':
$img = @imagecreatefromgif($file);
break;
case 
'.png':
$img = @imagecreatefrompng($file);
break;
default:
$img false;
break;
}
return 
$img;
}

## --------------------------------------------------------

public function resizeImage($newWidth$newHeight$option="auto")
{
// *** Get optimal width and height - based on $option
$optionArray $this->getDimensions($newWidth$newHeight$option);

$optimalWidth $optionArray['optimalWidth'];
$optimalHeight $optionArray['optimalHeight'];

// *** Resample - create image canvas of x, y size
$this->imageResized imagecreatetruecolor($optimalWidth$optimalHeight);
imagecopyresampled($this->imageResized$this->image0000$optimalWidth$optimalHeight$this->width$this->height);

// *** if option is 'crop', then crop too
if ($option == 'crop') {
$this->crop($optimalWidth$optimalHeight$newWidth$newHeight);
}
}

## --------------------------------------------------------

private function getDimensions($newWidth$newHeight$option)
{

switch (
$option)
{
case 
'exact':
$optimalWidth $newWidth;
$optimalHeight$newHeight;
break;
case 
'portrait':
$optimalWidth $this->getSizeByFixedHeight($newHeight);
$optimalHeight$newHeight;
break;
case 
'landscape':
$optimalWidth $newWidth;
$optimalHeight$this->getSizeByFixedWidth($newWidth);
break;
case 
'auto':
$optionArray $this->getSizeByAuto($newWidth$newHeight);
$optimalWidth $optionArray['optimalWidth'];
$optimalHeight $optionArray['optimalHeight'];
break;
case 
'crop':
$optionArray $this->getOptimalCrop($newWidth$newHeight);
$optimalWidth $optionArray['optimalWidth'];
$optimalHeight $optionArray['optimalHeight'];
break;
}
return array(
'optimalWidth' => $optimalWidth'optimalHeight' => $optimalHeight);
}

## --------------------------------------------------------

private function getSizeByFixedHeight($newHeight)
{
$ratio $this->width $this->height;
$newWidth $newHeight $ratio;
return 
$newWidth;
}

private function 
getSizeByFixedWidth($newWidth)
{
$ratio $this->height $this->width;
$newHeight $newWidth $ratio;
return 
$newHeight;
}

private function 
getSizeByAuto($newWidth$newHeight)
{
if (
$this->height width)
// *** Image to be resized is wider (landscape)
{
$optimalWidth $newWidth;
$optimalHeight$this->getSizeByFixedWidth($newWidth);
}
elseif (
$this->height $this->width)
// *** Image to be resized is taller (portrait)
{
$optimalWidth $this->getSizeByFixedHeight($newHeight);
$optimalHeight$newHeight;
}
else
// *** Image to be resizerd is a square
{
if (
$newHeight getSizeByFixedWidth($newWidth);
} else if (
$newHeight $newWidth) {
$optimalWidth $this->getSizeByFixedHeight($newHeight);
$optimalHeight$newHeight;
} else {
// *** Sqaure being resized to a square
$optimalWidth $newWidth;
$optimalHeight$newHeight;
}
}

return array(
'optimalWidth' => $optimalWidth'optimalHeight' => $optimalHeight);
}

## --------------------------------------------------------

private function getOptimalCrop($newWidth$newHeight)
{

$heightRatio $this->height $newHeight;
$widthRatio $this->width $newWidth;

if (
$heightRatio height $optimalRatio;
$optimalWidth $this->width $optimalRatio;

return array(
'optimalWidth' => $optimalWidth'optimalHeight' => $optimalHeight);
}

## --------------------------------------------------------

private function crop($optimalWidth$optimalHeight$newWidth$newHeight)
{
// *** Find center - this will be used for the crop
$cropStartX = ( $optimalWidth 2) - ( $newWidth /);
$cropStartY = ( $optimalHeight2) - ( $newHeight/);

$crop $this->imageResized;
//imagedestroy($this->imageResized);

// *** Now crop from center to exact requested size
$this->imageResized imagecreatetruecolor($newWidth $newHeight);
imagecopyresampled($this->imageResized$crop 00$cropStartX$cropStartY$newWidth$newHeight $newWidth$newHeight);
}

## --------------------------------------------------------

public function saveImage($savePath$imageQuality="100")
{
// *** Get extension
$extension strrchr($savePath'.');
$extension strtolower($extension);

switch(
$extension)
{
case 
'.jpg':
case 
'.jpeg':
if (
imagetypes() & IMG_JPG) {
imagejpeg($this->imageResized$savePath$imageQuality);
}
break;

case 
'.gif':
if (
imagetypes() & IMG_GIF) {
imagegif($this->imageResized$savePath);
}
break;

case 
'.png':
// *** Scale quality from 0-100 to 0-9
$scaleQuality round(($imageQuality/100) * 9);

// *** Invert quality setting as 0 is best, not 9
$invertScaleQuality $scaleQuality;

if (
imagetypes() & IMG_PNG) {
imagepng($this->imageResized$savePath$invertScaleQuality);
}
break;

// ... etc

default:
// *** No extension - No save.
break;
}

imagedestroy($this->imageResized);
}

## --------------------------------------------------------



تابع resizeImage($newWidth, $newHeight, $option=”auto”) وظیفه اصلی تغییر اندازه تصویر به عهده داره که پارامتر اول عرض تصویر جدید و پارامتر دوم طول تصویر جدید و پارامتر سوم روش تغییر سایز تصویر که می تواند چهار مقدارexactوportraitوlandscapeوauto به خودش بگیرد . این مقادیر توسط متد getDimensions پردازش وابعاد جدید تولید می گردند .

خوب حالا یک مثال داشته باشیم :

کد php:
// *** Include the class
include("resize-class.php");

// *** 1) Initialise / load image
$resizeObj = new resize('my_image.jpg');

// *** 2) Resize image (options: exact, portrait, landscape, auto, crop)
$resizeObj -> resizeImage(200200'crop');

// *** 3) Save image
$resizeObj -> saveImage('my_image_resized.jpg'100); 
نقل قول این ارسال در یک پاسخ
ارسال پاسخ 


پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان


Persian Translation by MyBBIran.com - Ver: 4.1
Powered by MyBB, © 2002-2024 MyBB Group.
Theme designed by Marvel (Sidebar created by Yaldaram - Yaldaram.com)
Theme Translation by Mt Edition