清晰头脑 2024-02-01 16:06 采纳率: 9.1%
浏览 3

nodejs使用sharp拆分多页tif文件

node.js使用sharp报错,没用过sharp不知道有没有写错,来人帮忙看一下代码有没有问题

const fs = require('fs')
const sharp = require('sharp')
async function splitMultiPageImage(inputPath,outputPathTemplate){
    const image = sharp(inputPath)
    const pages = await image.metadata().then(metadata => metadata.pages);
    for (let i = 0 ; i < pages ; i++){
        const pageStream = await image.clone().extractPage(i).toBuffer();
        const outputPath = outputPathTemplate.replace('%d',i + 1) + '.jpg';
        await sharp(pageStream)
        .jpeg()
        .toFile(outputPath);
    }
}
splitMultiPageImage('./test.jpg','./output/page-%d.jpg')
.then(() => console.log('图片拆分完成'))
.catch(err => console.error('图片拆分过程中出现问题',err))

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-01 16:09
    关注

    引自免费微信小程序:皆我百晓生

    在您的代码中,您尝试使用sharp库来拆分一个多页的TIFF文件,并将其转换为单页JPEG格式后分别保存。从代码逻辑上看,大部分结构是正确的,但针对多页TIFF文件,需要对extractPage方法稍作调整。

    以下是修订后的完整代码:

    const fs = require('fs');
    const sharp = require('sharp');
    
    async function splitMultiPageImage(inputPath, outputPathTemplate) {
      // 加载TIFF图像
      const image = sharp(inputPath);
    
      // 获取TIFF文件中的总页数
      const pages = await image.metadata().then(metadata => metadata.pages);
    
      for (let i = 0; i < pages; i++) {
        // 使用clone避免操作原图像对象
        const pageStream = await image.clone().extract({ left: 0, top: 0, width: metadata.width, height: metadata.height, page: i + 1 }).toBuffer();
    
        // 设置输出路径并替换占位符
        const outputPath = outputPathTemplate.replace('%d', i + 1) + '.jpg';
    
        // 将当前页转为JPEG格式并写入文件
        await sharp(pageStream)
          .jpeg()
          .toFile(outputPath);
      }
    
      console.log('图片拆分完成');
    }
    
    // 调用函数拆分TIFF文件
    splitMultiPageImage('./test.tif', './output/page-%d.jpg')
      .catch(err => console.error('图片拆分过程中出现问题', err));
    

    这里主要更改了extractPage方法调用,因为在Sharp v0.26.0之后,extractPage被移除,取而代之的是extract方法,它需要一个包含page属性的对象作为参数。此外,确认输入文件是.tif扩展名,因为您提到要处理多页TIFF文件。最后,将错误处理部分修改为只在.catch块中打印错误信息,以保持与您原有代码风格的一致性。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月1日

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见