php

Hướng dẫn dùng trim image trong PHP

answer

124

Nếu bạn đang cố gắng tạo hình thu nhỏ, trước tiên bạn phải thay đổi kích thước hình ảnh bằng cách sử dụng imagecopyresampled();. Bạn phải thay đổi kích thước của hình ảnh để kích thước của cạnh nhỏ hơn của hình ảnh bằng với cạnh tương ứng của ngón tay cái.

Ví dụ: nếu hình ảnh nguồn của bạn là 1280x800px và ngón tay cái của bạn là 200x150px, bạn phải thay đổi kích thước hình ảnh của mình thành 240x150px và sau đó cắt nó thành 200x150px. Điều này để tỷ lệ khung hình của hình ảnh sẽ không thay đổi.

Đây là công thức chung để tạo hình thu nhỏ:

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

Chưa thử nghiệm điều này nhưng nó sẽ hoạt động.

BIÊN TẬP

Bây giờ đã được thử nghiệm và hoạt động.

124 hữu ích 5 bình luận chia sẻ

answer

16

imagecopyresampled()sẽ lấy một khu vực hình chữ nhật từ $src_imagechiều rộng $src_wvà chiều cao $src_htại vị trí ($src_x, $src_y)và đặt nó vào một khu vực hình chữ nhật $dst_imagecó chiều rộng $dst_wvà chiều cao $dst_htại vị trí ($dst_x, $dst_y).

Nếu tọa độ nguồn và đích cũng như chiều rộng và chiều cao khác nhau, việc kéo giãn hoặc thu nhỏ đoạn ảnh thích hợp sẽ được thực hiện. Các tọa độ tham chiếu đến góc trên bên trái.

Chức năng này có thể được sử dụng để sao chép các vùng trong cùng một hình ảnh. Nhưng nếu các khu vực trùng nhau, kết quả sẽ không thể đoán trước được.

- Biên tập -

Nếu $src_wvà $src_hnhỏ hơn $dst_wvà $dst_htương ứng, hình ảnh ngón tay cái sẽ được phóng to. Nếu không, nó sẽ được thu nhỏ.

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

16 hữu ích 1 bình luận chia sẻ

answer

3

php 5.5 có chức năng hình ảnh //php.net/manual/en/ Chức năng.imagecrop.php

3 hữu ích 0 bình luận chia sẻ

answer

1

Cải thiện chức năng Crop hình ảnh trong PHP một cách nhanh chóng.

//www.example.com/cropimage.php?filename=a.jpg&newxsize=100&newysize=200&constrain=1

Mã trong cropimage.php

$basefilename = @basename(urldecode($_REQUEST['filename'])); $path = 'images/'; $outPath = 'crop_images/'; $saveOutput = false; // true/false ("true" if you want to save images in out put folder) $defaultImage = 'no_img.png'; // change it with your default image $basefilename = $basefilename; $w = $_REQUEST['newxsize']; $h = $_REQUEST['newysize']; if ($basefilename == "") { $img = $path . $defaultImage; $percent = 100; } else { $img = $path . $basefilename; $len = strlen($img); $ext = substr($img, $len - 3, $len); $img2 = substr($img, 0, $len - 3) . strtoupper($ext); if (!file_exists($img)) $img = $img2; if (file_exists($img)) { $percent = @$_GET['percent']; $constrain = @$_GET['constrain']; $w = $w; $h = $h; } else if (file_exists($path . $basefilename)) { $img = $path . $basefilename; $percent = $_GET['percent']; $constrain = $_GET['constrain']; $w = $w; $h = $h; } else { $img = $path . 'no_img.png'; // change with your default image $percent = @$_GET['percent']; $constrain = @$_GET['constrain']; $w = $w; $h = $h; } } // get image size of img $x = @getimagesize($img); // image width $sw = $x[0]; // image height $sh = $x[1]; if ($percent > 0) { // calculate resized height and width if percent is defined $percent = $percent * 0.01; $w = $sw * $percent; $h = $sh * $percent; } else { if (isset ($w) AND !isset ($h)) { // autocompute height if only width is set $h = (100 / ($sw / $w)) * .01; $h = @round($sh * $h); } elseif (isset ($h) AND !isset ($w)) { // autocompute width if only height is set $w = (100 / ($sh / $h)) * .01; $w = @round($sw * $w); } elseif (isset ($h) AND isset ($w) AND isset ($constrain)) { // get the smaller resulting image dimension if both height // and width are set and $constrain is also set $hx = (100 / ($sw / $w)) * .01; $hx = @round($sh * $hx); $wx = (100 / ($sh / $h)) * .01; $wx = @round($sw * $wx); if ($hx < $h) { $h = (100 / ($sw / $w)) * .01; $h = @round($sh * $h); } else { $w = (100 / ($sh / $h)) * .01; $w = @round($sw * $w); } } } $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($w, $h); // Copy from image source, resize it, and paste to image destination @ImageCopyResampled($thumb, $im, 0, 0, 0, 0, $w, $h, $sw, $sh); //Other format imagepng() if ($saveOutput) { //Save image $save = $outPath . $basefilename; @ImageJPEG($thumb, $save); } else { // Output resized image header("Content-type: image/jpeg"); @ImageJPEG($thumb); } }

1 hữu ích 0 bình luận chia sẻ

answer

0

$image = imagecreatefromjpeg($_GET['src']);

Cần được thay thế bằng cái này:

$image = imagecreatefromjpeg('images/thumbnails/myimage.jpg');

Bởi vì imagecreatefromjpeg()đang mong đợi một chuỗi.
Điều này đã làm việc cho tôi.

ref:
//php.net/manual/en/ Chức năng.imagecreatefromjpeg.php

0 hữu ích 0 bình luận chia sẻ

answer

0

Mã 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; ?>

0 hữu ích 0 bình luận chia sẻ

answer

0

Bạn có thể sử dụng imagecrophàm trong (PHP 5> = 5.5.0, PHP 7)

Thí dụ:

<?php $im = imagecreatefrompng('example.png'); $size = min(imagesx($im), imagesy($im)); $im2 = imagecrop($im, ['x' => 0, 'y' => 0, 'width' => $size, 'height' => $size]); if ($im2 !== FALSE) { imagepng($im2, 'example-cropped.png'); imagedestroy($im2); } imagedestroy($im); ?>

0 hữu ích 0 bình luận chia sẻ

answer

-1

$image = imagecreatefromjpeg($_GET['src']); $filename = 'images/cropped_whatever.jpg'

Phải được thay thế bằng:

$image = imagecreatefromjpeg($_GET['src']);

Sau đó, nó sẽ hoạt động!

-1 hữu ích 0 bình luận chia sẻ

Chủ đề