Intereting Posts
Symfony 3: обработчик успешного вызова по умолчанию из настраиваемого обработчика Вложенные php включают поведение Попытка получить общую сумму на основе ввода пользователем Когда использовать ErrorException vs Exception? Чтение только при обновлении данных XML PHP – Преобразование целочисленного целочисленного значения в float с тремя десятичными знаками Невозможно установить способ доставки в Magento order create script Обработка математических уравнений в php PHP memcached сеанс не работает получить идентификатор последней вставленной записи без использования mysql_insert_id () Аргумент Mysql_fetch_array не является допустимым результатом MYSQL Как я могу прочитать содержимое каталога на удаленном сервере с помощью PHP? phpmailer не отправляет почту в gmail, yahoo, hotmail или блокирует электронную почту, отправленную phpmailer Могу ли я получить доступ к поля дискриминатора из php в doctrine2? Мне нужна моя страница PHP, чтобы показать мой образ BLOB из базы данных mysql

Обрезать изображение в PHP

В приведенном ниже коде используется изображение, которое я хочу, но для больших изображений оно также работает. Есть ли способ «масштабирования изображения»

Idealy я мог бы иметь каждое изображение примерно того же размера до обрезки, чтобы каждый раз получать хорошие результаты

Код

<?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>'; 

Если вы пытаетесь создать эскизы, вы должны сначала изменить размер изображения с помощью imagecopyresampled(); , Вы должны изменить размер изображения так, чтобы размер меньшей стороны изображения был равен соответствующей стороне большого пальца.

Например, если исходное изображение 1280x800px, а большой палец – 200x150px, вы должны изменить размер изображения до 240x150px, а затем обрезать его до 200x150px. Это так, что соотношение сторон изображения не изменится.

Вот общая формула для создания эскизов:

 $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); 

Не проверял это, но он должен работать.

РЕДАКТИРОВАТЬ

Теперь проверено и работает.

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

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

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

– Редактировать –

Если $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() ожидает строку.
Это сработало для меня.

ссылка:
http://php.net/manual/en/function.imagecreatefromjpeg.php

php 5.5 имеет функцию imagecrop http://php.net/manual/en/function.imagecrop.php

Есть ли способ «масштабирования изображения».

Для меньшего подхода на стороне сервера / PHP , вот хороший плагин jQuery .

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

Код 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> 

upload.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']); 

Тогда это сработает!