略微加速

PHP官方手册 - 互联网笔记

PHP - Manual: Imagick::readImage

2024-11-14

Imagick::readImage

(PECL imagick 2, PECL imagick 3)

Imagick::readImageReads image from filename

说明

public Imagick::readImage(string $filename): bool

Reads image from filename

参数

filename

返回值

成功时返回 true

add a noteadd a note

User Contributed Notes 3 notes

up
25
markus dot s dot schmitz at gmail dot com
9 years ago
Use this to convert all pages of a PDF to JPG:

<?php
$imagick
= new Imagick();
$imagick->readImage('myfile.pdf');
$imagick->writeImages('converted.jpg', false);
?>

If you need better quality, try adding $imagick->setResolution(150, 150); before reading the file!

If you experience transparency problems when converting PDF to JPEG (black background), try flattening your file:

<?php
$imagick
= new Imagick();
$imagick->readImage('myfile.pdf[0]');
$imagick = $imagick->flattenImages();
$imagick->writeFile('pageone.jpg');
?>

In order to read pages from a PDF-file use [PAGENUMBER] after the filename (pages start from zero!).

Example: Read page #1 from test.pdf

<?php
$imagick
= new Imagick();
$imagick->readImage('test.pdf[0]');
$imagick->writeImage('page_one.jpg');
?>
up
8
holdoffhunger at gmail dot com
9 years ago
What is the difference between ReadImage and ReadImageFile?  Based by looking at the pages, you would think that they behave the exact same, except in their arguments: ReadImage takes a string containing the folder location of the file, and ReadImageFile takes a handle pointing to the file location.  Initially, the first looks far more tempting, since you don't have to worry about fopen and fclose commands.

But, there is a problem with the ReadImage function!  With an imagemagick object whose data was created from this function, I could scale, change the colors, and perform artistic effects upon the object, without any problems at all, but then there was a problem with saving: it seemed to be keep me stuck to the image format of the original image (in this case, a ".jpg", but it may be different elsewhere).  The functions setImageFormat and setFormat, programmed line after line, provided no effect to changing the format to png, bmp, or gif.  When the only line of code I changed was ReadImage to ReadImageFile, the problem disappears entirely.

Some sample code to demonstrate (using PHP Version 5.2.17).  Input Filename: test.jpg.  Output Filenames: test_result_bad.bmp, test_result_bad.png, test_result_good.bmp, test_result_good.png.  The resultant filesizes should be enough to convince you that all bad files are merely duplicate jpgs...

<?php

           
// Author: holdoffhunger@gmail.com

        // Preset Image Location
        // ------------------------------

   
$image_file_location = "test.jpg";

       
// Create Objects
        // ------------------------------

   
$imagick_type_bad = new Imagick();
   
$imagick_type_good = new Imagick();

       
// Grab Data - BAD METHOD
        // ------------------------------

   
$imagick_type_bad->readImage($image_file_location);

       
// Grab Data - GOOD METHOD
        // ------------------------------
   
   
$file_handle_for_viewing_image = fopen($image_file_location, 'a+');
   
   
$imagick_type_good->readImageFile($file_handle_for_viewing_image);
   
   
fclose($file_handle_for_viewing_image);

       
// Save File - BAD DATA
        // ------------------------------

   
$file_handle_for_saving_bad_bmp = fopen("test_result_bad.bmp", 'a+');

   
$imagick_type_bad_bmp = clone $imagick_type_bad;
   
$imagick_type_bad_bmp->setImageFormat("bmp");
   
$imagick_type_bad_bmp->setFormat("bmp");
   
$imagick_type_bad_bmp->writeImageFile($file_handle_for_saving_bad_bmp);

   
fclose($file_handle_for_saving_bad_bmp);

   
$file_handle_for_saving_bad_png = fopen("test_result_bad.png", 'a+');

   
$imagick_type_bad_png = clone $imagick_type_bad;
   
$imagick_type_bad_png->setImageFormat("png");
   
$imagick_type_bad_png->setFormat("png");
   
$imagick_type_bad_png->writeImageFile($file_handle_for_saving_bad_png);

   
fclose($file_handle_for_saving_bad_png);

       
// Save File - Good DATA
        // ------------------------------

   
$file_handle_for_saving_good_bmp = fopen("test_result_good.bmp", 'a+');

   
$imagick_type_good_bmp = clone $imagick_type_good;
   
$imagick_type_good_bmp->setImageFormat("bmp");
   
$imagick_type_good_bmp->setFormat("bmp");
   
$imagick_type_good_bmp->writeImageFile($file_handle_for_saving_good_bmp);

   
fclose($file_handle_for_saving_good_bmp);

   
$file_handle_for_saving_good_png = fopen("test_result_good.png", 'a+');

   
$imagick_type_good_png = clone $imagick_type_good;
   
$imagick_type_good_png->setImageFormat("png");
   
$imagick_type_good_png->setFormat("png");
   
$imagick_type_good_png->writeImageFile($file_handle_for_saving_good_png);

   
fclose($file_handle_for_saving_good_png);

?>
up
-6
lindsay at axys dot co dot nz
7 years ago
If you have just uploaded the PDF and want to generate an image from the first page, the [0] needs to be added to the image name as a text string.

        $filename = getSafeFileName($uploaddir,basename($_FILES['brochure_pdf']['name'], $overwrite));
        $uploadfile = $uploaddir . $filename;
        if (move_uploaded_file($_FILES['brochure_pdf']['tmp_name'], $uploadfile)) {
              $brochure_pdf = $filename;
            $im = new Imagick();
            $im->setResolution(80,80);
            $im->readimage($uploadfile."[0]");
            $im->setImageFormat('jpeg');
            $image_name = "save_as_name.jpg";
            $imageprops = $im->getImageGeometry();
            if ($imageprops['width'] <= 175 && $imageprops['height'] <= 300) {
                // don't upscale
             } else {
                 $im->resizeImage(175,300, imagick::FILTER_LANCZOS, 0.9, true);
             }

            $im->writeImage($uploaddir .$image_name);
            $im->clear();
            $im->destroy();

官方地址:https://www.php.net/manual/en/imagick.readimage.php

北京半月雨文化科技有限公司.版权所有 京ICP备12026184号-3