private function _smartCrop($oldImage, $cropW, $cropH){
        $image = clone $oldImage;

        $this->resizeFit($image, 30, 30);

        $origW = $oldImage->getWidth();
        $origH = $oldImage->getHeight();
        $resizeW = $image->getWidth();
        $resizeH = $image->getHeight();

        $smallCropW = round(($resizeW / $origW) * $cropW);
        $smallCropH = round(($resizeH / $origH) * $cropH);

        $step = 1;

        for($y = 0; $y < $resizeH-$smallCropH; $y+=$step){
            for($x = 0; $x < $resizeW-$smallCropW; $x+=$step){
                $hist[$x.'-'.$y] = $this->_entropy($image->histogram(array(array($x, $y), array($smallCropW, $smallCropH))));
            }
            if($resizeW-$smallCropW <= 0){
                $hist['0-'.$y] = $this->_entropy($image->histogram(array(array(0, 0), array($smallCropW, $smallCropH))));
            }
        }
        if($resizeH-$smallCropH <= 0){
            $hist['0-0'] = $this->_entropy($image->histogram(array(array(0, 0), array($smallCropW, $smallCropH))));
        }

        asort($hist);
        end($hist);
        $pos = key($hist); // last key
        list($x, $y) = explode('-', $pos);
        $x = round($x*($origW / $resizeW));
        $y = round($y*($origH / $resizeH));

        return array($x,$y);
    }
private function _smartCrop($oldImage, $cropW, $cropH){
        $image = clone $oldImage;

        $this->resizeFit($image, 30, 30);

        $origW = $oldImage->getWidth();
        $origH = $oldImage->getHeight();
        $resizeW = $image->getWidth();
        $resizeH = $image->getHeight();

        $smallCropW = round(($resizeW / $origW) * $cropW);
        $smallCropH = round(($resizeH / $origH) * $cropH);

        $step = 1;

        for($y = 0; $y < $resizeH-$smallCropH; $y+=$step){
            for($x = 0; $x < $resizeW-$smallCropW; $x+=$step){
                $hist[$x.'-'.$y] = $this->_entropy($image->histogram(array(array($x, $y), array($smallCropW, $smallCropH))));
            }
            if($resizeW-$smallCropW <= 0){
                $hist['0-'.$y] = $this->_entropy($image->histogram(array(array(0, 0), array($smallCropW, $smallCropH))));
            }
        }
        if($resizeH-$smallCropH <= 0){
            $hist['0-0'] = $this->_entropy($image->histogram(array(array(0, 0), array($smallCropW, $smallCropH))));
        }

        asort($hist);
        end($hist);
        $pos = key($hist); // last key
        list($x, $y) = explode('-', $pos);
        $x = round($x*($origW / $resizeW));
        $y = round($y*($origH / $resizeH));

        return array($x,$y);
    }
private function _smartCrop ( $ oldImage , $ cropW , $ cropH ) { $ image = clone $ oldImage ; $ this -> resizeFit ( $ image , 30 , 30 ) ; $ origW = $ oldImage -> getWidth ( ) ; $ origH = $ oldImage -> getHeight ( ) ; $ resizeW = $ image -> getWidth ( ) ; $ resizeH = $ image -> getHeight ( ) ; $ smallCropW = round ( ( $ resizeW / $ origW ) * $ cropW ) ; $ smallCropH = round ( ( $ resizeH / $ origH ) * $ cropH ) ; $ step = 1 ; for ( $ y = 0 ; $ y < $ resizeH - $ smallCropH ; $ y += $ step ) { for ( $ x = 0 ; $ x < $ resizeW - $ smallCropW ; $ x += $ step ) { $ hist [ $ x . '-' . $ y ] = $ this -> _entropy ( $ image -> histogram ( array ( array ( $ x , $ y ) , array ( $ smallCropW , $ smallCropH ) ) ) ) ; } if ( $ resizeW - $ smallCropW <= 0 ) { $ hist [ '0-' . $ y ] = $ this -> _entropy ( $ image -> histogram ( array ( array ( 0 , 0 ) , array ( $ smallCropW , $ smallCropH ) ) ) ) ; } } if ( $ resizeH - $ smallCropH <= 0 ) { $ hist [ '0-0' ] = $ this -> _entropy ( $ image -> histogram ( array ( array ( 0 , 0 ) , array ( $ smallCropW , $ smallCropH ) ) ) ) ; } asort ( $ hist ) ; end ( $ hist ) ; $ pos = key ( $ hist ) ; // last key list ( $ x , $ y ) = explode ( '-' , $ pos ) ; $ x = round ( $ x * ( $ origW / $ resizeW ) ) ; $ y = round ( $ y * ( $ origH / $ resizeH ) ) ; return array ( $ x , $ y ) ; }
Crop based on entropy.

@param Image $oldImage
@param $cropW
@param $cropH

@return array
Crop based on entropy .