В приведенном ниже коде используется изображение, которое я хочу, но для больших изображений оно также работает. Есть ли способ «масштабирования изображения»
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']);
Тогда это сработает!