PHP Conference Japan 2024

Imagick::readImage

(PECL imagick 2, PECL imagick 3)

Imagick::readImage从文件名读取图像

描述

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

从文件名读取图像

参数

filename

返回值

成功时返回 true

添加注释

用户贡献的注释 2 条注释

markus dot s dot schmitz at gmail dot com
11 年前
使用它将 PDF 的所有页面转换为 JPG

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

如果您需要更好的质量,请尝试在读取文件之前添加 $imagick->setResolution(150, 150);!

如果您在将 PDF 转换为 JPEG 时遇到透明度问题(黑色背景),请尝试展平您的文件

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

为了从 PDF 文件中读取页面,请在文件名后使用 [PAGENUMBER](页面从零开始!)。

示例:从 test.pdf 读取第 1 页

<?php
$imagick
= new Imagick();
$imagick->readImage('test.pdf[0]');
$imagick->writeImage('page_one.jpg');
?>
holdoffhunger at gmail dot com
11 年前
ReadImage 和 ReadImageFile 之间有什么区别?根据查看页面,您可能会认为它们的行为完全相同,只是在参数上有所不同:ReadImage 获取包含文件文件夹位置的字符串,而 ReadImageFile 获取指向文件位置的句柄。最初,第一个看起来更有吸引力,因为您不必担心 fopen 和 fclose 命令。

但是,ReadImage 函数存在一个问题!使用从此函数创建的数据的 imagemagick 对象,我可以毫无问题地缩放、更改颜色并在对象上执行艺术效果,但随后保存时出现问题:它似乎让我坚持使用原始图像的图像格式(在本例中为“.jpg”,但在其他地方可能有所不同)。一行接一行编写的函数 setImageFormat 和 setFormat 对将格式更改为 png、bmp 或 gif 没有产生任何影响。当我唯一更改的行是将 ReadImage 更改为 ReadImageFile 时,问题完全消失了。

一些示例代码来演示(使用 PHP 版本 5.2.17)。输入文件名:test.jpg。输出文件名:test_result_bad.bmp、test_result_bad.png、test_result_good.bmp、test_result_good.png。生成的的文件大小应该足以让您相信所有错误的文件都只是重复的 jpg...

<?php

// 作者:[email protected]

// 预设图像位置
// ------------------------------

$image_file_location = "test.jpg";

// 创建对象
// ------------------------------

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

// 获取数据 - 错误方法
// ------------------------------

$imagick_type_bad->readImage($image_file_location);

// 获取数据 - 正确方法
// ------------------------------

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

// 保存文件 - 错误数据
// ------------------------------

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

// 保存文件 - 正确数据
// ------------------------------

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

?>
To Top