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

Hàm imagecrop[] trong PHP có nhiệm vụ cắt một ảnh theo tỷ lệ nhất định.

imagecrop [ resource $image , array $rect ] : resource

  • Tham số truyền vào 
  • Giá trị trả về
  • Ví dụ minh họa
  • Ứng dụng
  • Các hàm liên quan

Tham số truyền vào 

  • $image là nguồn của ảnh, hoặc được tạo từ hàm imagecreatetruecolor[].
  • $rect là kích thước cắt ảnh theo toạ độ x,y và width,height.

Giá trị trả về

Hàm này trả về đường dẫn của file được Crop nếu thành công và trả về FALSE nếu thất bại.

Ví dụ minh họa

Ảnh ban đầu

Ảnh sau khi được Crop

Ứng dụng

Ảnh trước khi Crop

Ảnh sau khi Crop

Trong ví dụ trên bạn có thể sử dụng để crop lấy trung tâm của ảnh gốc.

Các hàm liên quan

  • imagecreatetruecolor[] hàm tạo một khung ảnh với 2 tham số width,height.
  • imagecolorallocate[] hàm xác định giá trị màu sắc theo chuẩn màu rgb.
  • imagestring[] hàm tạo text vào ảnh.
  • imagecropauto[] hàm crop ảnh theo chế độ có sẵn.

Hi vọng với bài viết này, bạn đã hiểu rõ cách sử dụng hàm imagecrop[] trong PHP. Nếu thấy bài viết hay và ý nghĩa, hãy like và chia sẻ với bạn bè để mọi người cùng nhau học tập nhé. Cảm ơn bạn đã ghé thăm codetutam.com

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_w$src_hnhỏ hơn $dst_w$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ỏ.


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
  
  
  

  
  Select image to upload:
  
  
 

 
 

upload.php

enter code here
  

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ụ:


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ủ Đề