Обрезать изображение на PHP
приведенный ниже код хорошо обрезает изображение, что я и хочу, но для больших изображений он также работает. Есть ли способ "масштабирования изображения"
В идеале я мог бы иметь каждое изображение примерно одинакового размера перед обрезкой, чтобы я получал хорошие результаты каждый раз
код
<?php
$image = $_GET['src']; // the image to crop
$dest_image = 'images/cropped_whatever.jpg'; // make sure the directory is writeable
$img = imagecreatetruecolor('200','150');
$org_img = imagecreatefromjpeg($image);
$ims = getimagesize($image);
imagecopy($img,$org_img, 0, 0, 20, 20, 200, 150);
imagejpeg($img,$dest_image,90);
imagedestroy($img);
echo '<img src="'.$dest_image.'" ><p>';
7 ответов:
Если вы пытаетесь создать миниатюры, вы должны сначала изменить размер изображения с помощью
imagecopyresampled();. Вы должны изменить размер изображения так, чтобы размер меньшей стороны изображения был равен соответствующей стороне большого пальца.вот общая формула создание эскизов:
$image = imagecreatefromjpeg($_GET['src']); $filename = 'images/cropped_whatever.jpg'; $thumb_width = 200; $thumb_height = 150; $width = imagesx($image); $height = imagesy($image); $original_aspect = $width / $height; $thumb_aspect = $thumb_width / $thumb_height; if ( $original_aspect >= $thumb_aspect ) { // If image is wider than thumbnail (in aspect ratio sense) $new_height = $thumb_height; $new_width = $width / ($height / $thumb_height); } else { // If the thumbnail is wider than the image $new_width = $thumb_width; $new_height = $height / ($width / $thumb_width); } $thumb = imagecreatetruecolor( $thumb_width, $thumb_height ); // Resize and crop imagecopyresampled($thumb, $image, 0 - ($new_width - $thumb_width) / 2, // Center the image horizontally 0 - ($new_height - $thumb_height) / 2, // Center the image vertically 0, 0, $new_width, $new_height, $width, $height); imagejpeg($thumb, $filename, 80);не проверял это, но это должны работа.
EDIT
теперь проверено и работает.
imagecopyresampled()будет принимать прямоугольную область от$src_imageшириной$src_wи высотой$src_hна должность($src_x, $src_y)и поместите его в прямоугольную область$dst_imageшириной$dst_wи высотой$dst_hна должность($dst_x, $dst_y).если исходные и конечные координаты, а также ширина и высота отличаются, будет выполнено соответствующее растяжение или сжатие фрагмента изображения. Координаты относятся к верхнему левому углу.
эту функцию можно использовать для копирования регионы в пределах одного изображения. Но если регионы перекрываются, то результаты будут непредсказуемыми.
- Edit -
если
$src_wи$src_hменьше, чем$dst_wи$dst_hсоответственно, изображение большого пальца будет увеличено. В противном случае он будет уменьшен.<?php $dst_x = 0; // X-coordinate of destination point $dst_y = 0; // Y-coordinate of destination point $src_x = 100; // Crop Start X position in original image $src_y = 100; // Crop Srart Y position in original image $dst_w = 160; // Thumb width $dst_h = 120; // Thumb height $src_w = 260; // Crop end X position in original image $src_h = 220; // Crop end Y position in original image // Creating an image with true colors having thumb dimensions (to merge with the original image) $dst_image = imagecreatetruecolor($dst_w, $dst_h); // Get original image $src_image = imagecreatefromjpeg('images/source.jpg'); // Cropping imagecopyresampled($dst_image, $src_image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h); // Saving imagejpeg($dst_image, 'images/crop.jpg'); ?>
$image = imagecreatefromjpeg($_GET['src']);должен быть заменен следующим образом:
$image = imagecreatefromjpeg('images/thumbnails/myimage.jpg');, потому что
imagecreatefromjpeg()ожидает строку.
Это сработало для меня.ref:
http://php.net/manual/en/function.imagecreatefromjpeg.php
php 5.5 имеет функцию imagecrophttp://php.net/manual/en/function.imagecrop.php
есть ли способ "масштабирования изображения".
по меньшей на стороне сервера / PHP подходим, вот такой хороший плагин jQuery.
можно было бы сделать все необходимые настройки -масштабирование и соотношение сторон, вид -на стороне клиента и отправить окончательные обрезанные позиции области и размер в на стороне сервера для окончательной манипуляции и спасения. Этот docs сказать довольно много для вас, чтобы получить качалку.
HTML-код:-
enter code here <!DOCTYPE html> <html> <body> <form action="upload.php" method="post" enctype="multipart/form-data"> Select image to upload: <input type="file" name="image" id="fileToUpload"> <input type="submit" value="Upload Image" name="submit"> </form> </body> </html>загрузить.php
enter code here <?php $image = $_FILES; $NewImageName = rand(4,10000)."-". $image['image']['name']; $destination = realpath('../images/testing').'/'; move_uploaded_file($image['image']['tmp_name'], $destination.$NewImageName); $image = imagecreatefromjpeg($destination.$NewImageName); $filename = $destination.$NewImageName; $thumb_width = 200; $thumb_height = 150; $width = imagesx($image); $height = imagesy($image); $original_aspect = $width / $height; $thumb_aspect = $thumb_width / $thumb_height; if ( $original_aspect >= $thumb_aspect ) { // If image is wider than thumbnail (in aspect ratio sense) $new_height = $thumb_height; $new_width = $width / ($height / $thumb_height); } else { // If the thumbnail is wider than the image $new_width = $thumb_width; $new_height = $height / ($width / $thumb_width); } $thumb = imagecreatetruecolor( $thumb_width, $thumb_height ); // Resize and crop imagecopyresampled($thumb, $image, 0 - ($new_width - $thumb_width) / 2, // Center the image horizontally 0 - ($new_height - $thumb_height) / 2, // Center the image vertically 0, 0, $new_width, $new_height, $width, $height); imagejpeg($thumb, $filename, 80); echo "cropped"; die; ?>
$image = imagecreatefromjpeg($_GET['src']); $filename = 'images/cropped_whatever.jpg'должен быть заменен:
$image = imagecreatefromjpeg($_GET['src']);тогда это будет работать!
Comments