تغییر اندازه تصاویر بوسیله php

مرداد ۵, ۱۳۹۲ توسط : afshin

برای کوچک کردن تصاویر و تبدیل اندازه آن به مقیاس دلخواه راهکارهای زیادی وجود داره ولی در این بخش کلاسی از 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->image, 0, 0, 0, 0, $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 /2 );
    $cropStartY = ( $optimalHeight/ 2) - ( $newHeight/2 );

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

    // *** Now crop from center to exact requested size
    $this->imageResized = imagecreatetruecolor($newWidth , $newHeight);
    imagecopyresampled($this->imageResized, $crop , 0, 0, $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 = 9 - $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 پردازش وابعاد جدید تولید می گردند .

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

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

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

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

    // *** ۳) Save image
    $resizeObj -> saveImage('my_image_resized.jpg', 100);

بازدید : ۴۸۶۹

دی ۲۲, ۱۳۹۲ @ ۱۲:۳۳ ق.ظ

سلام دوست عزیز ممنون بابت مطلبت فقط یه چیزی با این کلاس اندازه رو تغییر دادیم کیفیت و حجمشم میتونیم بیاریم پایین ممنون میشم خبرم کنی با ایمیلی که دادم . تشکر

پاسخ دادن
اسفند ۱۳, ۱۳۹۲ @ ۱:۵۴ ب.ظ

سلام کلاسی که نوشتید سه جاش ایراد داره
خودتون امتحان کنید متوجه میشید – ممنون میشم رفع ایرادش کنید

پاسخ دادن
اسفند ۱۷, ۱۳۹۲ @ ۸:۰۴ ب.ظ

سلام
خسته نباشید
کد خطا میده ممنون میشم بررسی و رفع کنید :*

پاسخ دادن
محمد
بهمن ۱۶, ۱۳۹۳ @ ۱:۱۳ ب.ظ

دوستان عزیزی که کلاس رو تست کردن و خطا میده. اصل این کلاس رو میتونید از آدرس زیر دریافت کنید. نمیدونم چرا هنگام کپی پیست کردن این کلاس مشکل پیش اومده و قسمتی از اون کپی نشده؟؟!!!!
http://stackoverflow.com/questions/12774411/php-resizing-image-on-upload-rotates-the-image-when-i-dont-want-it-to

پاسخ دادن

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


*