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 "";
            }
        }
    }

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

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

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.

setImageFormat('jpeg');
        $imagick->setImageCompression(Imagick::COMPRESSION_JPEG);
        $imagick->setImageCompressionQuality($quality);
        $imagick->thumbnailImage($width, $height, false, false);
        $filename_no_ext = reset(explode('.', $img));
        if (file_put_contents($filename_no_ext . '_thumb' . '.jpg', $imagick) === false) {
            throw new Exception("Could not put contents.");
        }
        return true;
    }
    else {
        throw new Exception("No valid image provided with {$img}.");
    }
}

// example usage
try {
    generateThumbnail('test.jpg', 100, 50, 65);
}
catch (ImagickException $e) {
    echo $e->getMessage();
}
catch (Exception $e) {
    echo $e->getMessage();
}
?>

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

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

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 thumbnail created successfully.":"Some error occurred, please try again.";

    }else{

    //if form is not submitted, below variable should be blank
    $thumb_src = '';
    $message = '';
    }
    ?>

    
    Image upload and generate thumbnail
     
     

Đã trả lời ngày 11 tháng 6 năm 2016 lúc 11:51Jun 11, 2016 at 11:51

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

1

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

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

Dozer789

1.9402 Huy hiệu vàng23 Huy hiệu bạc43 Huy hiệu đồng2 gold badges23 silver badges43 bronze badges

Đã trả lời ngày 20 tháng 1 năm 2014 lúc 15:36Jan 20, 2014 at 15:36

Alaminalaminalamin

551 Huy hiệu bạc1 Huy hiệu đồng1 silver badge1 bronze badge

3

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

Đã trả lời ngày 26 tháng 10 năm 2016 lúc 6:17Oct 26, 2016 at 6:17

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

2

Làm cách nào để tạo hình ảnh thu nhỏ?

Chúng tôi sẽ cho bạn biết những gì bạn cần để tạo hình thu nhỏ và cách chỉnh sửa chúng ...
Tải xuống phần mềm chỉnh sửa ảnh ..
Chỉnh sửa hình ảnh của bạn và tạo hình thu nhỏ ..
Sau khi hình thu nhỏ của bạn kết thúc ..
Giải quyết đồ họa và hình ảnh của bạn ..

Làm cách nào để lưu hình thu nhỏ web?

Nhấp chuột phải vào URL đó và nhấp vào Mở trong tab mới.6. Trong tab mới, nhấp chuột phải vào hình ảnh và chọn Lưu hình ảnh dưới dạng.Bây giờ bạn có thể đặt tên cho tệp của mình và lưu nó vào máy tính của bạn. 6. In the new tab, right click the image and choose Save image as. Now you can name your file and save it to your computer.

Làm thế nào để bạn nhận được một hình thu nhỏ từ một video?

Bạn có thể chụp ảnh màn hình từ video của mình giải thích rõ nhất nội dung của nó hoặc bạn có thể sử dụng một công cụ như Photoshop hoặc Canva để phủ văn bản hoặc biểu tượng trên hình ảnh.Để tạo màn hình trên PC, hãy sử dụng công cụ Snipping Windows.Đối với người dùng Mac, hãy nhấn lệnh+shift+4 để chọn phần màn hình bạn muốn chụp.use a tool like Photoshop or Canva to overlay text or icons on the image. To make a screen capture on a PC, use the Windows Snipping Tool. For Mac users, hit Command+Shift+4 to select the part of your screen you want to capture.