在php中将tiff转换为jpg?

2024-03-17

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

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

有谁知道我该怎么做这样的事情?

提前致谢。


在论坛中http://www.php.net/gd http://www.php.net/gd写有以下评论:

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

图像魔术师(http://www.imagemagick.org/script/index.php 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,但某些程序可能不会注意到这一点。

ELSE

使用“imagick”PECL 扩展

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

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

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

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

OR

$image->writeImage('something.png');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在php中将tiff转换为jpg? 的相关文章

  • 如何修复 Laravel 中未找到的“PDF”类

    在我的 Laravel 应用程序中遇到以下错误 CollaboPDFController php 第 14 行中的 FatalErrorException 未找到 PDF 类 这是我的ColaboPDFController php
  • PHP cURL 重定向到本地主机

    我正在尝试使用带有 cURL 的 php 脚本登录外部网页 我是 cURL 的新手 所以我觉得我错过了很多东西 我找到了几个例子并修改了它们以允许访问https页面 最终 我的目标是能够登录页面并在登录后通过指定的链接下载 csv 到目前为
  • 如何在 Laravel 5 中对合并集合进行分页?

    我正在创建一个包含两种类型的对象的流 BluePerson 和 RedPerson 为了创建流 我获取所有这两个对象 然后将它们合并到一个集合中 这样做之后 我需要对它们进行分页 但是分页似乎是针对雄辩的模型和数据库查询 而不是集合 我见过
  • 在Windows上安装php Composer时出现错误

    在安装 Composer 以使用 Laravel 框架时 我遇到了一些错误 Download failed file get contents SSL operation failed with code 1 OpenSSL Error m
  • WordPress 安装中发现的恶意 PHP 代码有什么作用?

    我能够解码在一些 WordPress 文件中找到的以下 PHP 脚本 只是出于好奇 有人可以告诉我这段代码实际上是做什么的吗 看起来它已经以某种方式复制到同一服务器上的其他 WordPress 安装中
  • 使用php在html页面中显示bbcode

    我已经有一个 bbcode 字符串 mybbcode b Hello word b 使用 php 我想在 html 页面中以 html 格式显示它 例如 div gt b hello word b div 基本上其他人已经对你说过了 但是如
  • 打印一个模式以显示最多 5 行 5 列的数字,例如 5 4 3 2 1 和下一行 4 3 2 1 5 直到第 5 行

    这是一个正方形图案 每行有 5 列 共有 5 行 图案如下所示 5 4 3 2 1 4 3 2 1 5 3 2 1 5 4 2 1 5 4 3 1 5 4 3 2 我的代码如下以获得模式 但当计数器达到 1 并显示在相应的列值中时 我无法重
  • 为什么使用闭包进行赋值而不是直接将值赋给键?

    我当时正在看在 7 10 他添加了一个数据库依赖项并使用闭包来分配值 我的问题是为什么不直接使用直接赋值 我的意思是不这样做 container db capsule 相当于这样做 container db function contain
  • filter_input() 何时删除 POST 变量的斜杠?

    我创建了一个小型 PHP 脚本 它在 PHP 5 2 17 的服务器上运行magic quotes gpc指令已启用 我没有对 php ini 文件的写访问权限 并且我想从用户输入中删除所有斜杠 即使magic quotes gpc指令被关
  • 无法显示由 Fine-uploader 上传到 Amazon s3 的图像

    我现在尝试设置fineuploader s3以显示在aws服务器上成功上传的文件的图像 如示例页面上所做的那样 http fineuploader com s3 demo http fineuploader com s3 demo 我 仍然
  • PHP 负面因素不断增加

    我这里有这个代码 remaining 0 foreach clientArrayInvoice as key gt row remaining remaining row total 它的作用是 它获取总计值并将它们相加 但是当我有负值时
  • 如何缓存 twitter api 结果?

    我想缓存 twitter api 结果的结果并将其显示给用户 缓存结果的最佳方法是什么 我正在考虑根据时间限制将结果写入文件 可以吗 还是应该使用任何其他方法 最重要的是 理想的缓存时间是多少 我想显示来自 twitter 的最新内容 但
  • iOS 11 浏览器图像错误

    在 iOS 11 中滚动页面时出现以下错误 在 Firefox Safari 和 Chrome 中 在 Android 设备中 不会发生该错误 这些是背景图像 我不知道这是否是导致错误的原因 图 2 显示了图像在 Android 中的用途和
  • 使用 IntlDateFormatter 转换非公历日期

    我应该如何使用将非公历日期转换为其他日历类型IntlDateFormatter 我要转换 1392 01 02 from persian to islamic日历 我尝试了以下代码 但它没有转换日历 formatter IntlDateFo
  • PHP多图像文件上传并存储到文件夹和数据库

    我正在建立一个网站 向夜间狂欢者展示大城市夜总会场所和活动的列表 我正在尝试构建一个后端页面 管理员可以在其中添加俱乐部并输入信息 例如机构名称 位置 相对价格等 当然还有俱乐部的一些图像 每个俱乐部必须至少有一张图像 即主图像 可以有额外
  • 我应该使用排队系统来处理付款吗?

    我在用着Slim https www slimframework com和这个结合Stripe 的 PHP 库 https stripe com docs api php在我的应用程序中处理付款 一切都很好 但是直到最近 我在我的系统中发现
  • 如何检查一个值是否已经存在以避免重复?

    我有一个 URL 表 但我不想要任何重复的 URL 如何使用 PHP MySQL 检查给定 URL 是否已在表中 如果您不想重复 可以执行以下操作 添加唯一性约束 use REPLACE http dev mysql com doc ref
  • PHP:如何检查总数。 URL 中的参数?

    我正在使用 REQUEST 检索参数 有没有办法找到总数 URL 中的参数 而不是检索每个参数然后进行计数 这将为您提供总数 分隔的 URL 查询参数 count explode SERVER QUERY STRING 如果您只想要唯一的参
  • 您可以使用 MySQL 查询来完整创建数据库的副本吗

    我有一个包含 5 个表的 MySQL 数据库的实时版本和一个测试版本 我不断使用 phpMyAdmin 将实时版本中的每个表复制到测试版本 有谁有mysql查询语句来制作数据库的完整副本吗 查询字符串需要考虑结构 数据 自动增量值以及与需要
  • 通过复选框选择多行时出错错误未定义索引:复选框

    我想从中选择多行checkbox并想通过单击按钮立即更新它们 我尝试了多种方法 但不起作用 你能帮忙吗 它显示错误为Undefined index checkbox td td

随机推荐

  • (UWP) 将网格另存为 png

    我正在开发一个 UWP 应用程序 它有一个带有子项 图像和文本块的网格 我有两件事想要实现并需要帮助 如何使用预定义名称将 Grid 元素及其子内容作为图像 最好是 PNG 保存在本地文件夹中 如何检索此保存的图像 然后将其作为附件与其他兼
  • 为什么这个简单的连接查询使用子查询会明显更快?

    我有两张桌子 order details这是 100 000 行 并且outbound即 10 000 行 我需要加入他们的专栏order number 两者都是 VARCHAR 50 order number 在出站表中不唯一 CREAT
  • 如何根据返回值执行不同的查询?

    我有一个足球比赛列表 定义如下 id datetime status gameweek round id home team id 1 2019 03 31 00 00 00 1 29 12696 1243 2 2019 03 31 00
  • 如何在Python中获取所有直接子目录

    我正在尝试编写一个简单的Python脚本 它将所有子目录中的index tpl复制到index html 有一些例外 我因尝试获取子目录列表而陷入困境 import os def get immediate subdirectories a
  • 在两个不同的头文件中的两个结构中包含循环依赖项是否错误?

    我有一个非常大的程序无法编译 我怀疑它与跨结构的循环依赖关系有关 当我像下面这样编码时 它不会编译 foo h ifndef FOO define FOO include bar h typedef struct foo Foo struc
  • 创建模型时用 laravel 返回模型

    我需要将保存为 json 的新模型发送到前面 但我看不到响应中的列organizationid 这是我的模型 class Organization extends Model protected table core organizatio
  • 强制纵向模式

    好吧 由于没有人回答我之前的问题 我开始相信可能没有简单的方法可以做到这一点 但我很乐观 这是我的问题 在我的应用程序中 我使用常规 UIButton 从 ViewControllerOne 切换到 ViewControllerTwo Vi
  • 用于动态创建元素的 jQuery CSS()

    我正在使用 jQuery CSS 函数来设置一些元素的样式 element css style 这是可行的 但部分元素是在页面加载后动态创建的 这应该是 element live created function this css styl
  • Code First 一对多关系的多个外键

    我在使用 Entity Framework 6 Code First Fluent API 时遇到了一些不符合惯例的问题 一个典型的例子是我有一个名为软件的实体 我不希望数据库表被称为 Softwares 它应该被称为软件 但也有一些其他的
  • 将 ${my.property} 计算为 @Value 注释中的 SpEL 表达式

    长话短说 有没有办法解释由以下结果产生的字符串 my property 作为一个 SpEL 表达式 Value不使用转换器的注释 例如就像是 Value my property 我有一个抽象工厂 简化的 可以让我构建一些公共对象 这些对象是
  • 如何在Android即时应用程序中存储数据并在已安装的应用程序中恢复它

    据谷歌称 开发即时应用程序受到迷药 最佳实践 is 安装应用程序后保留用户状态 https developer android com topic instant apps ux best practices html keep user
  • 在 PowerShell 中通过引用传递/更新哈希表和数组

    当我了解 Perl 和 PowerShell 的不同之处时 我试图通过引用确定传递列表和更新列表之间的差异 我think我现在明白了 PowerShell 方面的 通过引用传递哈希表 调用函数时 不需要在表名前添加 ref 在函数内 表的名
  • 有什么方法可以获取模块中定义的函数列表?

    是否有任何内省的魔法可以给我一个模块中定义的函数列表 module Foo function foo foo end function bar bar end end 一些神话般的功能 例如 functions in Foo 这将返回 fo
  • 仅查看当前用户对象的列表,Django REST

    我有 2 个视图 notes 和 notes 在注释模型中models py我有所有者变量 用于存储所有者的登录信息 因为我想要有很多用户 我不想让他们看到别人的笔记 所以我创建了权限 class IsOwner permissions B
  • 删除 python 列表中的重复项但记住索引

    如何删除列表中的重复项 保留项目的原始顺序并记住列表中任何项目的第一个索引 例如 删除重复项 1 1 2 3 yields 1 2 3 但我需要记住索引 0 2 3 我正在使用Python 2 7 我会以不同的方式解决这个问题并使用Orde
  • 获取调用C#方法的实例

    我正在寻找一种算法 可以在该方法中获取调用该方法的对象 例如 public class Class1 public void Method the question object a the object that called the m
  • SVN与外部通用代码

    目前 我正在尝试使用相同的代码为多个产品设置存储库 最好的解决方案是创建共享代码的真正库并以这种方式使用它们 然而 目前这需要很长时间 这个想法是拥有一个具有以下树的单个存储库 trunk Project1 Project2 Shared
  • 在android中比较两个日期是否在同一周内

    我有两个约会 他们是从 Calendar c Calendar getInstance year c get c YEAR month c get c MONTH month date c get c DATE 其他数据分为日期 月份 2
  • 在 Curl 请求中禁用 Javascript (PHP)

    有没有办法在 PHP 的 Curl 请求中禁用 Javascript 尝试模仿浏览器请求 来自禁用 Javascript 的浏览器 这可以通过标头 用户代理 cookie 来完成吗 Thanks 有没有办法在 PHP 的 Curl 请求中禁
  • 在php中将tiff转换为jpg?

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