Hướng dẫn php create thumbnail from image - php tạo hình thu nhỏ từ hình ảnh

Tôi muốn tạo một hình thu nhỏ từ hình ảnh được tải lên của người dùng để hình ảnh trông không bị đè bẹp. Nhưng cũng muốn một bản sao của hình ảnh gốc .. vì vậy tôi muốn hình ảnh gốc gửi hình ảnh gốc đến máy chủ của tôi và cũng tạo phiên bản ngón tay cái và gửi nó đến máy chủ của mình để tôi có thể gọi cho mỗi người trong số chúng cho mỗi người dùng rằng Tải lên hình ảnh của riêng họ.

Bảng người dùng của tôi có 2 bảng

`user_pic` longblob NOT NULL,
`user_pic_small` longblob NOT NULL,

Tôi không bị sập nóng với phía hình ảnh của mã hóa nhưng đây là những gì tôi có cho đến nay.

Imageupload.php

>  method="POST" enctype="multipart/form-data" target="ifr1">
>                       
>                   
>         

media.profileimage.upload.php

if[isset[$_FILES['image_data']]]{
       if[is_uploaded_file[$_FILES['image_data']['tmp_name']]] {

            // prepare the image for insertion
                $imgData =addslashes [file_get_contents[$_FILES['image_data']['tmp_name']]];

            // get the image info..
              $size = getimagesize[$_FILES['image_data']['tmp_name']];


            // our sql query
            $creator_id     =   $_SESSION['id'];
            $sql = "UPDATE users SET user_pic='".$imgData."' WHERE id=$creator_id";
            $sql2 = "INSERT INTO userphotos[photo_ownerid,photo_ispublic, photo_name, photo_caption, photo_imagedata] VALUES [$creator_id,1,'Profile Picture','Profile Picture','$imgData']";

            // insert the image
            if[!mysql_query[$sql]] {
                echo "Fail. It broke.";
            }else{
            $c=mysql_query[$sql2];

                echo " parent.alert['Image Uploaded','',1000];";
            }
        }
    }

Sẽ đánh giá cao bất kỳ sự giúp đỡ hoặc hướng dẫn. Cảm ơn bạn

Imran Omer

7011 Huy hiệu vàng8 Huy hiệu bạc19 Huy hiệu đồng1 gold badge8 silver badges19 bronze badges

Đã hỏi ngày 7 tháng 7 năm 2012 lúc 15:37Jul 7, 2012 at 15:37

UPDATE:

Nếu bạn muốn tận dụng Imagick [nếu nó được cài đặt trên máy chủ của bạn]. Lưu ý: Tôi đã không sử dụng bản chất của Imagick

>  method="POST" enctype="multipart/form-data" target="ifr1">
>                       
>                   
>         
2 vì tôi đã gặp sự cố với nó trên máy chủ của mình. Nội dung đặt tập tin hoạt động tốt.


Tôi đã sử dụng điều này, chỉ cần thực hiện chức năng sau khi bạn lưu trữ hình ảnh gốc và sử dụng vị trí đó để tạo hình thu nhỏ. Chỉnh sửa nó theo ý thích của bạn ...

function makeThumbnails[$updir, $img, $id]
{
    $thumbnail_width = 134;
    $thumbnail_height = 189;
    $thumb_beforeword = "thumb";
    $arr_image_details = getimagesize["$updir" . $id . '_' . "$img"]; // pass id to thumb name
    $original_width = $arr_image_details[0];
    $original_height = $arr_image_details[1];
    if [$original_width > $original_height] {
        $new_width = $thumbnail_width;
        $new_height = intval[$original_height * $new_width / $original_width];
    } else {
        $new_height = $thumbnail_height;
        $new_width = intval[$original_width * $new_height / $original_height];
    }
    $dest_x = intval[[$thumbnail_width - $new_width] / 2];
    $dest_y = intval[[$thumbnail_height - $new_height] / 2];
    if [$arr_image_details[2] == IMAGETYPE_GIF] {
        $imgt = "ImageGIF";
        $imgcreatefrom = "ImageCreateFromGIF";
    }
    if [$arr_image_details[2] == IMAGETYPE_JPEG] {
        $imgt = "ImageJPEG";
        $imgcreatefrom = "ImageCreateFromJPEG";
    }
    if [$arr_image_details[2] == IMAGETYPE_PNG] {
        $imgt = "ImagePNG";
        $imgcreatefrom = "ImageCreateFromPNG";
    }
    if [$imgt] {
        $old_image = $imgcreatefrom["$updir" . $id . '_' . "$img"];
        $new_image = imagecreatetruecolor[$thumbnail_width, $thumbnail_height];
        imagecopyresized[$new_image, $old_image, $dest_x, $dest_y, 0, 0, $new_width, $new_height, $original_width, $original_height];
        $imgt[$new_image, "$updir" . $id . '_' . "$thumb_beforeword" . "$img"];
    }
}

Hàm trên tạo ra hình ảnh với kích thước hình thu nhỏ đồng nhất. Nếu hình ảnh không có cùng kích thước với kích thước hình thu nhỏ được chỉ định [theo tỷ lệ], nó chỉ có Blackspace ở trên cùng và dưới cùng.

Đã trả lời ngày 7 tháng 7 năm 2012 lúc 15:44Jul 7, 2012 at 15:44

AlexalexAlex

9.0727 Huy hiệu vàng38 Huy hiệu bạc81 Huy hiệu đồng7 gold badges38 silver badges81 bronze badges

5

Bạn có thể sử dụng phương pháp đơn giản nhất


Đã trả lời ngày 2 tháng 6 năm 2017 lúc 7:18Jun 2, 2017 at 7:18

1

Tôi đoán bạn đã tìm ra điều này. Nhưng tôi thấy rằng bạn đang lưu trữ các hình ảnh dưới dạng "Longblobs" khiến tôi nghĩ rằng bạn đang lưu trữ toàn bộ nội dung nhị phân của pic.

Tôi hy vọng bạn đã nhận ra rằng việc lưu trữ tên tệp trong DB của bạn có ý nghĩa hơn nhiều khi sử dụng thông tin đó để lấy các bức ảnh ra khỏi thư mục "tải lên" hoặc tương tự.

Mẹo - Không lưu đường dẫn tệp .. chỉ tên tệp .. Thêm thông tin đường dẫn trong mã của bạn khi cần. Bằng cách đó bạn có sự tự do nhất trong dòng. Nếu bạn cần thay đổi cấu trúc thư mục, bạn có thể thực hiện trong mã của mình thay vì thay đổi bản ghi DB.

Đã trả lời ngày 9 tháng 1 năm 2013 lúc 20:46Jan 9, 2013 at 20:46

K.K. Smithk.K. thợ rènK.K. Smith

9702 Huy hiệu vàng9 Huy hiệu bạc27 Huy hiệu đồng2 gold badges9 silver badges27 bronze badges

Tôi biết đây là một câu hỏi cũ, nhưng tôi tình cờ thấy cùng một vấn đề và cố gắng sử dụng chức năng được đưa ra trong câu trả lời của Alex.

Nhưng chất lượng trong kết quả JPEG là quá thấp. Vì vậy, tôi đã thay đổi chức năng một chút để trở nên dễ sử dụng hơn trong dự án của mình và thay đổi "ImageCopyResized" thành "ImageCopyResampled" [theo đề xuất này].

Nếu bạn đang có câu hỏi về cách sử dụng chức năng này, thì hãy thử xem phiên bản được ghi chép tốt ở đây.

function createThumbnail[$filepath, $thumbpath, $thumbnail_width, $thumbnail_height, $background=false] {
    list[$original_width, $original_height, $original_type] = getimagesize[$filepath];
    if [$original_width > $original_height] {
        $new_width = $thumbnail_width;
        $new_height = intval[$original_height * $new_width / $original_width];
    } else {
        $new_height = $thumbnail_height;
        $new_width = intval[$original_width * $new_height / $original_height];
    }
    $dest_x = intval[[$thumbnail_width - $new_width] / 2];
    $dest_y = intval[[$thumbnail_height - $new_height] / 2];

    if [$original_type === 1] {
        $imgt = "ImageGIF";
        $imgcreatefrom = "ImageCreateFromGIF";
    } else if [$original_type === 2] {
        $imgt = "ImageJPEG";
        $imgcreatefrom = "ImageCreateFromJPEG";
    } else if [$original_type === 3] {
        $imgt = "ImagePNG";
        $imgcreatefrom = "ImageCreateFromPNG";
    } else {
        return false;
    }

    $old_image = $imgcreatefrom[$filepath];
    $new_image = imagecreatetruecolor[$thumbnail_width, $thumbnail_height]; // creates new image, but with a black background

    // figuring out the color for the background
    if[is_array[$background] && count[$background] === 3] {
      list[$red, $green, $blue] = $background;
      $color = imagecolorallocate[$new_image, $red, $green, $blue];
      imagefill[$new_image, 0, 0, $color];
    // apply transparent background only if is a png image
    } else if[$background === 'transparent' && $original_type === 3] {
      imagesavealpha[$new_image, TRUE];
      $color = imagecolorallocatealpha[$new_image, 0, 0, 0, 127];
      imagefill[$new_image, 0, 0, $color];
    }

    imagecopyresampled[$new_image, $old_image, $dest_x, $dest_y, 0, 0, $new_width, $new_height, $original_width, $original_height];
    $imgt[$new_image, $thumbpath];
    return file_exists[$thumbpath];
}

Đã trả lời ngày 7 tháng 8 năm 2015 lúc 14:21Aug 7, 2015 at 14:21

Chỉ trong trường hợp bạn cần tạo ngón tay cái với chiều rộng tối đa và chiều cao tối đa ...

function makeThumbnails[$updir, $img, $id,$MaxWe=100,$MaxHe=150]{
    $arr_image_details = getimagesize[$img]; 
    $width = $arr_image_details[0];
    $height = $arr_image_details[1];

    $percent = 100;
    if[$width > $MaxWe] $percent = floor[[$MaxWe * 100] / $width];

    if[floor[[$height * $percent]/100]>$MaxHe]  
    $percent = [[$MaxHe * 100] / $height];

    if[$width > $height] {
        $newWidth=$MaxWe;
        $newHeight=round[[$height*$percent]/100];
    }else{
        $newWidth=round[[$width*$percent]/100];
        $newHeight=$MaxHe;
    }

    if [$arr_image_details[2] == 1] {
        $imgt = "ImageGIF";
        $imgcreatefrom = "ImageCreateFromGIF";
    }
    if [$arr_image_details[2] == 2] {
        $imgt = "ImageJPEG";
        $imgcreatefrom = "ImageCreateFromJPEG";
    }
    if [$arr_image_details[2] == 3] {
        $imgt = "ImagePNG";
        $imgcreatefrom = "ImageCreateFromPNG";
    }


    if [$imgt] {
        $old_image = $imgcreatefrom[$img];
        $new_image = imagecreatetruecolor[$newWidth, $newHeight];
        imagecopyresized[$new_image, $old_image, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height];

       $imgt[$new_image, $updir."".$id."_t.jpg"];
        return;    
    }
}

Đã trả lời ngày 1 tháng 2 năm 2013 lúc 16:12Feb 1, 2013 at 16:12

Hy vọng mã này sẽ giúp tạo hình thu nhỏ cho các định dạng JPG, PNG & GIF.


Đã trả lời ngày 10 tháng 10 năm 2014 lúc 4:16Oct 10, 2014 at 4:16

Hussainhussainhussain

3824 Huy hiệu bạc7 Huy hiệu đồng4 silver badges7 bronze badges

1

Tải lên hình ảnh với hình thu nhỏ tạo ra

upload.php



    
    Image upload and generate thumbnail
     
     

Bài Viết Liên Quan

Chủ Đề