Intereting Posts
Сохранить текущую страницу как HTML для сервера Создание массива с ассоциативными ключами массива и численными значениями массива PHP Вставить в таблицу только в том случае, если два отношения столбцов не дублируются eclipse helios для PHP – код форматирования недоступен Зачем использовать PHP OOP над базовыми функциями и когда? PHP Curl получает HTTP-код, а не весь документ Использование Amazon MWS (API-интерфейс Inventory API) с помощью CodeIgniter (PHP) Что такое хороший способ проверить, является ли изображение уникальным с помощью PHP? PHP exec () в качестве фонового процесса (Windows Wampserver Environment) Собственное приложение Phonegap, отправьте форму через почтовую программу PHP на реальном сервере Разрывы строк в контактной форме PHP Как удалить папку с содержимым с помощью PHP Как определить динамическую конфигурацию с помощью TreeBuilder? Строгие стандарты: нестатический метод (joomla и roksprocket) Selenium with Webdriver – переключиться на дочернее окно без имени

Изменить размер, затем обрезать PHP

Хорошо, в основном я хочу, чтобы все изображения были квадратами 170x170px. Таким образом, если изображение не является квадратом, я хочу, чтобы оно было изменено, а затем обрезано посередине.

Я провел много часов, играя с этим, и я никуда не ухожу. Я получил его, чтобы обрезать раздел большего изображения и т. Д., Но мне особенно нужно, чтобы изображение было изменено, а затем обрезано ..

Любая помощь будет принята с благодарностью.

// get image size of img $x = @getimagesize($img); // image width $sw = $x[0]; // image height $sh = $x[1]; if($sw > $sh) // Horizontal Rectangle? { $newwidth = ($sw/$sh)*170; $newheight=170; $x_pos = ($sw - $sh) / 2; $x_pos = ceil($x_pos); $y_pos=0; } else if($sh > $sw) // Vertical Rectangle? { $newheight = ($sh/$sw)*170; $newwidth=170; $y_pos = ($sh - $sw) / 2; $y_pos = ceil($y_pos); $x_pos=0; } else //Already Square { $newheight=170; $newwidth=170; } $im = @ImageCreateFromJPEG ($img) or // Read JPEG Image $im = @ImageCreateFromPNG ($img) or // or PNG Image $im = @ImageCreateFromGIF ($img) or // or GIF Image $im = false; // If image is not JPEG, PNG, or GIF if (!$im) { // We get errors from PHP's ImageCreate functions... // So let's echo back the contents of the actual image. readfile ($img); } else { // Create the resized image destination $thumb = @ImageCreateTrueColor (170, 170); // Copy from image source, resize it, and paste to image destination imagecopyresampled($thumb, $im, 0, 0, 180, $y_pos, 170, 170, $newwidth, $newheight); } 

Related of "Изменить размер, затем обрезать PHP"

Нуждается в некоторой работе, но она должна дать вам достаточно для начала.

 function crop($filename, $width, $height) { // image resource, assuming it's PNG $resource = imagecreatefrompng($filename); // resource dimensions $size = array( 0 => imagesx($resource), 1 => imagesy($resource), ); // sides $longer = (int)($size[0]/$width > $size[1]/$height); $shorter = (int)(!$longer); // ugly hack to avoid condition for imagecopyresampled() $src = array( $longer => 0, $shorter => ($size[$shorter]-$size[$longer])/2, ); // new image resource $new = imagecreatetruecolor($width, $height); // do the magic imagecopyresampled($new, $resource, 0, 0, $src[0], $src[1], $width, $height, $size[$longer], $size[$longer] ); // save it or something else :) } 

Изменить: Попытка объяснить «уродливый взлом» выше.

Двумя параметрами являются $src_x и $src_y , взятые из руководства :

imagecopyresampled () примет прямоугольную область из src_image ширины src_w и высоты src_h в позиции (src_x, src_y) и поместит ее в прямоугольную область dst_image ширины dst_w и высоту dst_h в позиции (dst_x, dst_y).

Значение, если ширина $filename больше, src_x должно быть 0 , а если высота больше, src_y должно быть 0 . Переведенный в код, он будет выглядеть примерно так:

 $src = ($size[$shorter]-$size[$longer])/2; if ( $longer === 1 ) { imagecopyresampled($new, $resource, 0, 0, $src, 0, $width, $height, $size[$longer], $size[$longer] ); } else { imagecopyresampled($new, $resource, 0, 0, 0, $src, $width, $height, $size[$longer], $size[$longer] ); } 

хорошо, вот рабочий;

 <? $img = 'leaf.jpg'; // get image size of img $x = @getimagesize($img); // image dimensions $sw = $x[0]; $sh = $x[1]; //dest size $dSize = 170; //find smallerst part and get needed scale and offset $yOff = 0; $xOff = 0; if($sw < $sh) { $scale = $dSize / $sw; $yOff = $sh/2 - $dSize/$scale/2; } else { $scale = $dSize / $sh; $xOff = $sw/2 - $dSize/$scale/2; } $im = @ImageCreateFromJPEG ($img) or // Read JPEG Image $im = @ImageCreateFromPNG ($img) or // or PNG Image $im = @ImageCreateFromGIF ($img) or // or GIF Image $im = false; // If image is not JPEG, PNG, or GIF if (!$im) { // We get errors from PHP's ImageCreate functions... // So let's echo back the contents of the actual image. readfile ($img); } else { // Create the resized image destination $thumb = @ImageCreateTrueColor ($dSize,$dSize); // Copy from image source, resize it, and paste to image destination imagecopyresampled($thumb, $im, 0, 0, $xOff,$yOff, $dSize, $dSize, $dSize / $scale ,$dSize / $scale); } header('content-type:image/jpeg'); imagejpeg($thumb); //imagejpeg($im); 

Вы используете ImageMagic? Если нет, вы должны. http://php.net/manual/en/book.imagick.php

Вы можете попробовать это, но я пока не знаю, но это выглядит многообещающе. http://phpthumb.sourceforge.net/