Обрезать часть изображения в php и изменить его размер - PullRequest
0 голосов
/ 27 октября 2010

У меня есть исходное изображение (может быть любое изображение с разными размерами). Я хочу быть в состоянии сказать php область от изображения, чтобы обрезать и изменить размер. Например:

  • Исходное изображение 800x800 пикселей.
  • PHP выбирает область изображения размером 50x50 пикселей с областью выделения, начинающейся на 80 пикселей от верхнего края исходного изображения и на 100 пикселей от левого края исходного изображения
  • Размер выбранной области затем изменяется до 37x37 пикселей.

Я пытался использовать функции imagecopyresampled () и imagecopyresized (), но они оба доставили мне странную проблему: imagecopyresampled () выводит выделенное изображение, но окружен черной областью, эквивалентной размерам исходного изображения. Функция imagecopyresized () также выделяет выбранную область, но она просто накладывается на исходное изображение. Конечной целью здесь является создание миниатюр из исходного изображения.

Пример кода, который я уже использую:

list($width_orig, $height_orig) = getimagesize($filename);
imagecopyresized($image_final, $image, 0, 0, 0, 0, 37, 37, $width_orig, $height_orig);

Вышеприведенное не совсем соответствует описанию задачи, но демонстрирует проблему, с которой я сталкиваюсь.

Примечание:

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

Ответы [ 2 ]

2 голосов
/ 27 октября 2010

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

    $w  = imagesx($img);
    $h  = imagesy($img);
    $newImage = imagecreatetruecolor($wNewOrj, $hNewOrj);
    if(($w/$h)<($wNewOrj/$hNewOrj)){
      $hNew = $h * $wNewOrj/$w;
      $wNew = $wNewOrj;
    }else{
      $hNew = $hNewOrj;
      $wNew = $w * $hNewOrj/$h;
    }
    $wDiff  = round(abs($wNewOrj-$wNew)/2);
    $hDiff  = round(abs($hNewOrj-$hNew)/2);
    imagecopyresampled($newImage, $img,
                       0,     0,     $wDiff,    $hDiff,
                       $wNew, $hNew, $w-$wDiff, $h-$hDiff);

    imagejpeg($newImage, $path, 85);
0 голосов
/ 27 октября 2010

Попробуйте мой класс манипулятора изображения, он делает именно то, что вы хотите - http://github.com/philBrown/Tolerable/blob/master/library/Tolerable/Image/Manipulator.php

...