当前位置: 首页 > 面试题库 >

在PHP中将tiff转换为jpg?

公羊灿
2023-03-14
问题内容

我有一台保存TIFF图像的服务器。大多数客户端可以读取和显示TIFF图像,因此没有问题。但是,某些客户端无法处理此格式,但可以处理JPG。我想到了使用PHP的GD库为没有TIFF阅读能力的客户端进行服务器端转换。但是我注意到GD也无法读取TIFF文件。

Imagick无法在Windows中工作,我的想法是创建一个imageFetcher.php,它将获取客户端所需的实际图像作为参数。它检查客户端的类型,并在需要时转换图像并输出JPG,否则仅输出TIFF。

有谁知道我该怎么做吗?

提前致谢。


问题答案:

在http://www.php.net/gd上的论坛中,写了以下评论:

IE不会显示TIFF文件,并且标准的PHP发行版不支持与TIFF之间的转换。

ImageMagick(http://www.imagemagick.org/script/index.php)是一个免费软件,可以读取,转换和写入多种格式的图像。对于Windows用户,它包括一个PHP扩展名php_magickwand_st.dll(是的,它在PHP
5.0.4下运行)。

从TIFF转换为JPEG时,还必须从CMYK颜色空间转换为RGB颜色空间,因为IE也无法显示CMYK
JPG。请注意:-TIFF文件可能具有RGB或CMYK颜色空间-JPEG文件可能具有RGB或CMYK颜色空间

以下是使用ImageMagick扩展名的示例函数:-将TIFF转换为JPEG文件格式-将CMIK转换为RGB颜色空间-将图像分辨率设置为300
DPI(不更改以像素为单位的图像大小)

<?php

function cmyk2rgb($file) {
    $mgck_wnd = NewMagickWand();
    MagickReadImage($mgck_wnd, $file);

    $img_colspc = MagickGetImageColorspace($mgck_wnd);
    if ($img_colspc == MW_CMYKColorspace) {
        echo "$file was in CMYK format<br />";
        MagickSetImageColorspace($mgck_wnd, MW_RGBColorspace);
    }
    MagickWriteImage($mgck_wnd, str_replace('.', '-rgb.', $file));
}

function tiff2jpg($file) {
    $mgck_wnd = NewMagickWand();
    MagickReadImage($mgck_wnd, $file);

    $img_colspc = MagickGetImageColorspace($mgck_wnd);
    if ($img_colspc == MW_CMYKColorspace) {
        echo "$file was in CMYK format<br />";
        MagickSetImageColorspace($mgck_wnd, MW_RGBColorspace);
    }
    MagickSetImageFormat($mgck_wnd, 'JPG' );
    MagickWriteImage($mgck_wnd, str_replace('.tif', '.jpg', $file));
}

function to300dpi($file) {
    $mgck_wnd = NewMagickWand();
    MagickReadImage($mgck_wnd, $file);
    $img_units = MagickGetImageUnits($mgck_wnd);
    switch ($img_units) {
        case MW_UndefinedResolution: $units= 'undefined'; break;
        case MW_PixelsPerInchResolution: $units= 'PPI'; break;
        case MW_PixelsPerCentimeterResolution: $units= 'PPcm'; break;
    }
    list($x_res, $y_res) = MagickGetImageResolution($mgck_wnd);
    echo "$file<br /> x_res=$x_res $units - y_res=$y_res $units<br />";
    if($x_res == 300 && $y_res == 300 && $img_units == MW_PixelsPerInchResolution) {return; }
    MagickSetImageResolution($mgck_wnd, 300 , 300);
    MagickSetImageUnits($mgck_wnd, MW_PixelsPerInchResolution);
    MagickWriteImage($mgck_wnd, str_replace('.', '-300.', $file));
}

$file='photos/test-cmyk.tif';
//this is a TIFF file in CMYK format with a 96 DPI resolution

cmyk2rgb($file);
$file = str_replace('.', '-rgb.', $file);

to300dpi($file);
$file = str_replace('.', '-300.', $file);

tiff2jpg($file);
$file = str_replace('.tif', '.jpg', $file);

to300dpi($file);
/* no file name changes as ImageMagick reports 300 DPIs
$file = str_replace('.', '-300.', $file);
*/

list($width, $height, $type, $attr) = getimagesize($file);
$width = $width/3;
$height = $height/3;
echo "<img src=\"http://localhost/$file\" width=\"$width\" height=\"$height\" alt=\"getimagesize() example\" />";
echo "<br />$file => width=$width - height=$height - type=$type - attr=$attr<br /><br />";

$file='photos/test-rgb.tif';
//this is a TIFF file in RGB format with a 96 DPI resolution

cmyk2rgb($file);
$file = str_replace('.', '-rgb.', $file);

to300dpi($file);
$file = str_replace('.', '-300.', $file);

tiff2jpg($file);
$file = str_replace('.tif', '.jpg', $file);

to300dpi($file);
/* no file name changes as ImageMagick reports 300 DPIs
$file = str_replace('.', '-300.', $file);
*/

list($width, $height, $type, $attr) = getimagesize($file);
$width = $width/3;
$height = $height/3;
echo "<img src=\"http://localhost/$file\" width=\"$width\" height=\"$height\" alt=\"getimagesize() example\" />";
echo "<br />$file => width=$width - height=$height - type=$type - attr=$attr<br /><br />";

?>

注意-尽管ImageMagick正确地将JPEG文件的分辨率设置为300 DPI,但是某些程序可能不会注意到它。

其他

使用“ imagick” PECL扩展名

http://pecl.php.net/package/imagick

http://php.net/manual/zh/book.imagick.php

根据源和目标(文件?URL?http响应?),您将执行以下操作:

 $image = new Imagick('something.tiff');
    $image->setImageFormat('png');
    echo $image;

要么

$image->writeImage('something.png');


 类似资料:
  • 问题内容: 我正在寻找将JPEG文件流转换为TIFF文件的Java API。我查看了JAI,但未找到与我正在查看的内容类似的内容。 有人可以指出我要这样做的一个好的API吗? 问题答案: 这里有一个例子 http://log.robmeek.com/2005/08/write-tiff-in- java.html

  • 问题内容: 最近,当我尝试显示图像文件时遇到问题。不幸的是,图像格式是TIFF格式,主要的网络浏览器不支持该格式(因为我知道Safari仅支持该格式)。由于某些限制,我必须将此格式转换为主流浏览器支持的其他格式。但是,当我尝试转换格式时,这给我带来了很多问题。 我已经在网上搜索过,尽管在此链接中发布了类似的问题,但我如何在Java中将TIF转换为PNG?“但是我无法获得建议的结果。 因此,我再次提

  • 问题内容: 我正在开发通过与服务器进行通讯的移动应用。这是我第一次使用PHP。我设法将数据上传到数据库中。现在,我需要发送图像以将其存储在ftp服务器中。为此,我转换并从我的应用程序发送。 服务器端 我得到了十六进制代码,但不确定如何将其转换为图像并存储在ftp服务器中。我在这里真的很挣扎。我用谷歌搜索,但找不到确切的一个。 任何帮助深表感谢。 问题答案: 将十六进制字符串转换为二进制: 等价于,

  • 问题内容: 我需要一个Java库将PDF转换为TIFF图像。PDF是传真,我将转换为TIFF,以便随后可以在图像上进行条形码识别。谁能推荐一个很好的免费开源库,将其从PDF转换为TIFF? 问题答案: 免责声明:我为Atalasoft工作 我们有一个可以将PDF转换为TIFF的SDK。渲染由Foxit软件提供支持,该软件可提供功能强大且高效的PDF渲染器。

  • 问题内容: 使用PHP将jpg图像转换为gif,png和bmp格式的可能重复项 我有一个PHP表单,该表单允许图像上传和检查以确保图像有效。 但是,我希望所有格式(PNG,JPG,JPEG和GIF)最终在提交后都是PNG。 我该怎么做呢? 问题答案: 然后,您只需要。实际上,它几乎变成了单线: 您将使用文件名,并且显然使用不同的输出文件名。但是图像格式探测本身将变得多余。

  • 问题内容: 我正在尝试将以单词形式编写的数值转换为整数。例如,“ iPhone有233.7万个应用程序”将变成“ iPhone为230783个应用程序” 在开始编码之前,我想知道此转换是否存在任何功能/代码。 问题答案: 有很多页面讨论从数字到单词的转换。反方向的数量不多。 以获取一种不错的算法: 好吧,总的来说,您正在做两件事:查找标记(转换为数字的单词)和应用语法。简而言之,您正在为一种非常有