当前位置: 首页 > news >正文

PHP使用Imagick库操作tiff

1. 获取tiff页数

function page_count($tiffPath): int
{$image = new \Imagick($tiffPath);// 获取TIFF文件中的页数$pages = $image->getNumberImages();// 释放内存$image->clear();return (int) $pages;
}

2. 拆分tiff页面为jpeg

function extract($tiffPath, int $quality = 90, string $savePath = ''): array
{if (empty($savePath)) {$savePath = dirname($tiffPath) . DIRECTORY_SEPARATOR . pathinfo($tiffPath, PATHINFO_FILENAME);}if (! is_dir($savePath)) {mkdir($savePath, 0777, true);}// 创建Imagick对象$image = new \Imagick($tiffPath);// 获取TIFF文件中的页数$pages = $image->getNumberImages();$res   = [];for ($i = 0; $i < $pages; $i++) {// 分离每一页$image->setIteratorIndex($i);$page = $image->getImage();// 设置JPEG格式和质量$page->setImageFormat('jpeg');$page->setImageCompressionQuality($quality);// 生成输出文件名$outputFile = $savePath . DIRECTORY_SEPARATOR . ($i + 1) . '.jpg';// 保存JPEG文件$page->writeImage($outputFile);// 释放内存$page->clear();$res[] = $outputFile;}// 释放内存$image->clear();return $res;
}

3. tiff转pdf

function to_pdf($tiffPath, string $pdfPath = '', bool $force = false): bool
{if (is_file($pdfPath) && ! $force) {return true;}if (empty($pdfPath)) {$pdfPath = $tiffPath . '.pdf';}$imagick = new \Imagick();// 分页读取$imagick->readImage($tiffPath);// 逐页处理$imagick->setIteratorIndex(0);$pdf = new Imagick();do {$page = $imagick->getImage();$page->setImageFormat('pdf');$pdf->addImage($page);$page->clear();} while ($imagick->nextImage());$pdf->writeImages($pdfPath, true);$pdf->clear();$imagick->clear();return file_exists($pdfPath);
}

唉 不过这个方案有个硬伤,针对大文件会爆内存,也只能对付一下小文件了

因此在此记录一下,然后我要在项目里清理掉这些代码了,因为我用python来实现了相应的处理,然后php通过api进行调用了, 本来信心满满的用rust也写了一个tiff转pdf,可能是俺的rust水平太菜,费了我3天时间,虽然最后搞出来了,打包exe也才5MB,但是耗时并没有缩短,还不如python的方案, 唉 白费了我3天, 真的是用生命诠释了"人生苦短 请用python" 

http://www.dtcms.com/a/410792.html

相关文章:

  • 海阔淘宝客助手wordpress演示站 | 紫色清新商城模板枣阳网站建设公司
  • 孤岛水流问题
  • SWAT模型在水文水资源、面源污染模拟中的实践技术应用及典型案例分析
  • 【C++】二叉搜索树的模拟实现和二叉树进阶OJ
  • Redis - Bitmap 类型
  • AUTOSAR 自适应平台 如何保证时间同步的可靠性?出现故障怎么办?
  • 设计互动网站建设做网页向网站提交数据
  • 北京架设网站杭州 建设网站制作
  • 学习笔记:Vue Router 编程式导航详解
  • Centos 7 创建ftp 权限最大支持上传删减
  • 哪家公司设计网站学用php做网站
  • 租用网站服务器网站改版 升级的目的是什么意思
  • java 项目docker 部署。
  • 【知识库文档】数据预处理PDF文档转成MD格式(gptpdf )
  • Java 高效实现 PowerPoint 转 PDF:不依赖Office
  • 新奇特:神经网络烘焙坊(下),万能配方的甜蜜奥义
  • 翁恺老师C语言基础教程代码学习
  • 天津建设网站的公司哪家好云南昆明网站建设价格
  • 网站开发需求书中山网络推广公司
  • RPC在分布式存储系统中的应用
  • 交互式手机网站网站建设功能
  • 07.容器监控
  • 学做网站哪里学郑州一网网站建设
  • react中redux的使用详细说明
  • 解码Android 系统蓝牙音频全流程
  • 做网站的文案wordpress 标签 修改
  • 疑难bug之正确处理InterruptedException
  • 【学习日记】[SSM]
  • 告别Print: Python调试入门,用PDB高效找Bug
  • 解决跨浏览器兼容性问题:CSS Flexbox布局在IE中的错位BUG