PHP изменение размера изображения и функция обрезки - PullRequest
1 голос
/ 01 октября 2010

Мне нужна функция, которая при загрузке фотографии должна обрезать изображение независимо от соотношения изображения в центре, чтобы убедиться, что кадрирование находится внутри изображения.

alt text

выше изображение 2592 *1944* 1006 *

я хочу обрезать изображение 159 * 129

alt text

, и это то, что я получаю при использованииплагин для cakephp (Miles Johnsons Upload Plugin)

может кто-нибудь помочь мне найти функцию обрезки изображения, чтобы сделать это, или помочь мне с алгоритмом в том же духе.

Ответы [ 3 ]

1 голос
/ 15 февраля 2012

Я должен сказать, что я не полностью протестировал этот кусок кода, я модифицировал его для личного использования, и это должно помочь вашей проблеме.

Замена функции обрезки в плагине / загрузчике / вендоре / загрузчике. Php

возле линии 368

со следующей функцией

 public function crop(array $options = array(), $explicit = false) {
    if ($this->_data[$this->_current]['group'] != 'image' || !$this->_enabled) {
        return false;
    }

    $options = $options + array('location' => self::LOC_CENTER, 'quality' => 100, 'width' => null, 'height' => null, 'append' => null, 'prepend' => null);
    $width = $this->_data[$this->_current]['width'];
    $height = $this->_data[$this->_current]['height'];
    $src_x = 0;
    $src_y = 0;
    $dest_w = $width;
    $dest_h = $height;
    $location = $options['location'];

    if (is_numeric($options['width']) && is_numeric($options['height'])) {
        $newWidth = $options['width'];
        $newHeight = $options['height'];

        if ($width / $newWidth > $height / $newHeight) {
            $dest_h = $options['height'];
            $dest_w = round($width / ($height / $newHeight));
        } else {
            $dest_w = $options['width'];
            $dest_h = round($height / ($width / $newWidth));
        }
    } else {
        if ($width > $height) {
            $newWidth = $height;
            $newHeight = $height;
        } else {
            $newWidth = $width;
            $newHeight = $width;
        }

        $dest_h = $newHeight;
        $dest_w = $newWidth;
    }

    $src_x = 0;
    $src_y = 0;
    if ($dest_w > $newWidth) {
            $src_x = ceil(( ($dest_w - $newWidth) / 2) * ($height / $newHeight));
    }

    if ($dest_h > $newHeight) {
            $src_y = ceil(( ($dest_h - $newHeight) / 2) * ($width / $newWidth));
    }

    $append = '_cropped_' . $newWidth . 'x' . $newHeight;

    if ($options['append'] !== false && empty($options['append'])) {
        $options['append'] = $append;
    }

    $transform = array(
        'width' => $newWidth,
        'height' => $newHeight,
        'source_x' => $src_x,
        'source_y' => $src_y,
        'source_w' => $width,
        'source_h' => $height,
        'dest_w' => $dest_w,
        'dest_h' => $dest_h,
        'target' => $this->setDestination($this->_data[$this->_current]['name'], true, $options, false),
        'quality' => $options['quality']
    );
    if ($this->transform($transform)) {

        return $this->_returnData($transform, $append, $explicit);
    }

    return false;
}

С уважением.

1 голос
/ 15 апреля 2012

Эта проблема решена, ознакомьтесь с последней версией дополнения к cake-uploader.https://github.com/milesj/cake-uploader/commit/2be63f32730755cffbace17ee8fa2d686785964d

1 голос
/ 01 октября 2010

Я использовал это: http://shiftingpixel.com/2008/03/03/smart-image-resizer/, чтобы создать все эскизы изображений, найденные здесь: http://www.patriciashin.com/painting.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...