php image resizer to image cropper

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Zeiss
    Confirmed User
    • May 2012
    • 5189

    #1

    php image resizer to image cropper

    Can you help me transofrm this? I wanna make it crop from center of image, not to resize it to fit a box. Original image must also be kept, should image regeneration be required later on.

    PHP Code:
    <?php if ( ! defined('ABS_PATH')) exit('ABS_PATH is not loaded. Direct access is not allowed.');
    
        class ImageResizer {
    
            public static function fromFile($imagePath) {
                return new ImageResizer($imagePath);
            }
    
            private $im;
    
            private function __construct($imagePath) {
                if(!file_exists($imagePath)) throw new Exception("$imagePath does not exist!");
                if(!is_readable($imagePath)) throw new Exception("$imagePath is not readable!");
                if(filesize($imagePath)==0) throw new Exception("$imagePath is corrupt or broken!");
    
                if(osc_use_imagick()) {
                    $this->im = new Imagick($imagePath);                
                } else {
                    $content = file_get_contents($imagePath);
                    $this->im = imagecreatefromstring($content);
                }
    
                return $this;
            }
    
            public function __destruct() {
                if(osc_use_imagick()) {
                    $this->im->destroy();
                } else {
                    imagedestroy($this->im);
                }
            }
    
            public function resizeTo($width, $height) {
                if(osc_use_imagick()) {
                    $bg = new Imagick();
                    $bg->newImage($width, $height, '#FF7F26');
                    
                    $this->im->thumbnailImage($width, $height, true);
                    $geometry = $this->im->getImageGeometry();
    
                    $x = ( $width - $geometry['width'] ) / 2;
                    $y = ( $height - $geometry['height'] ) / 2;
    
                    $bg->compositeImage( $this->im, imagick::COMPOSITE_OVER, $x, $y );
                    $this->im = $bg;
                } else {
                    $w = imagesx($this->im);
                    $h = imagesy($this->im);
    
                    if(($w/$h)>=($width/$height)) {
                        //$newW = $width;
                        $newW = ($w > $width)? $width : $w;
                        $newH = $h * ($newW / $w);
                    } else {
                        //$newH = $height;
                        $newH = ($h > $height)? $height : $h;
                        $newW = $w * ($newH / $h);
                    }
    
                    $newIm = imagecreatetruecolor($width,$height);//$newW, $newH);
                    imagealphablending($newIm, false);
                    $colorTransparent = imagecolorallocatealpha($newIm, 255, 255, 255, 127);
                    imagefill($newIm, 0, 0, $colorTransparent);
                    imagesavealpha($newIm, true);
                    imagecopyresampled($newIm, $this->im, (($width-$newW)/2), (($height-$newH)/2), 0, 0, $newW, $newH, $w, $h);
                    imagedestroy($this->im);
    
                    $this->im = $newIm;
                }
                return $this;
            }
    
            public function saveToFile($imagePath) {
                if(file_exists($imagePath) && !is_writable($imagePath)) throw new Exception("$imagePath is not writable!");
                if(osc_use_imagick()) {
                    $this->im->setImageFileName($imagePath);
                    $this->im->writeImage($imagePath);
                } else {
                   imagejpeg($this->im, $imagePath);
                }
            }
    
            public function show() {
                header('Content-Disposition: Attachment;filename=image.jpg');
                header('Content-type: image/jpg');
                if(osc_use_imagick()) {
                } else {
                    imagepng($this->im);
                }
            }
    
        }
    
    ?>


    Adult Webmasters Guides
  • woj
    <&(©¿©)&>
    • Jul 2002
    • 47882

    #2
    If you want to invest a few bucks, icq: 33375924 or email me at: woj#at#wojfun#.#com
    Custom Software Development, email: woj#at#wojfun#.#com to discuss details or skype: wojl2000 or gchat: wojfun or telegram: wojl2000
    Affiliate program tools: Hosted Galleries Manager Banner Manager Video Manager
    Wordpress Affiliate Plugin Pic/Movie of the Day Fansign Generator Zip Manager

    Comment

    • Itchy
      Datetronix.com
      • Jan 2001
      • 6525

      #3
      http://stackoverflow.com/questions/6...rom-center-php


      ICQ: 2588560
      Skype: Pornocop

      Comment

      Working...