首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Imagemagick jpeg压缩无法将某些TIFF转换为金字塔TIFF,但不是全部

Imagemagick jpeg压缩无法将某些TIFF转换为金字塔TIFF,但不是全部
EN

Stack Overflow用户
提问于 2014-04-18 18:17:38
回答 2查看 1.6K关注 0票数 0

我使用下面的循环将大约250个.tif文件转换为平铺的金字塔.tif文件,每个文件大约15到35 mb:

for i in *.tif; do convert $i -define tiff:tile-geometry=256x256 -compress jpeg 'ptif:tiled-'$i; done

这可能适用于略多于一半的图像:我得到了一个压缩的平铺.tif文件,大小约为原始文件的1/4。对于那些不能工作的,我得到了一个图像文件输出,它可能有大约4,000字节大,并且似乎与-debug all一起弹出的一个错误是Bogus input colorspace. "JPEGLib"。如果这些图像通过IIP Image Server传输,则不会显示,也不会在图像查看器中打开。

我已经将其本地化为可能的-compress jpeg参数。如果我在没有压缩的情况下运行,或者像-compress LossLess JPEG这样的无损压缩,它似乎可以工作,但平铺图像(显然)比原始图像更大,这是我试图避免的。

对不能转换的图像运行tiffinfo,但得到的结果如下:

坏的

代码语言:javascript
运行
AI代码解释
复制
$ tiffinfo WH-001.tif
    TIFF Directory at offset 0x106842c (17204268)
      Image Width: 1735 Image Length: 2479
      Resolution: 72, 72 pixels/inch
      Bits/Sample: 8
      Compression Scheme: None
      Photometric Interpretation: RGB color
      Extra Samples: 1<unassoc-alpha>
      FillOrder: msb-to-lsb
      Orientation: row 0 top, col 0 lhs
      Samples/Pixel: 4
      Rows/Strip: 1
      Planar Configuration: single image plane
      Page Number: 0-1
      DocumentName: WH-001.tif

工作中

代码语言:javascript
运行
AI代码解释
复制
$ tiffinfo WH-090.tif
    TIFFReadDirectory: Warning, Unknown field with tag 32934 (0x80a6) encountered.
    TIFF Directory at offset 0xd4 (212)
      Subfile Type: (0 = 0x0)
      Image Width: 2800 Image Length: 4160
      Resolution: 600, 600 pixels/inch
      Bits/Sample: 8
      Compression Scheme: None
      Photometric Interpretation: RGB color
      FillOrder: msb-to-lsb
      Orientation: row 0 top, col 0 lhs
      Samples/Pixel: 3
      Rows/Strip: 3
      Planar Configuration: single image plane
      Software: Oi/GFS, writer v00.06.02
      Tag 32934: 0
      ICC Profile: <present>, 3144 bytes

虽然我不确定如何判断为什么一个坏了,为什么另一个工作。

EN

回答 2

Stack Overflow用户

发布于 2019-03-07 23:28:13

我会考虑在这里使用libvips而不是convert

在这台配备10k x 10k像素JPG源的普通笔记本电脑上,我看到:

代码语言:javascript
运行
AI代码解释
复制
$ /usr/bin/time -f %M:%e convert wtc.jpg -define tiff:tile-geometry=256x256 -compress jpeg ptif:im.tif
1628568:34.29

这就是峰值1.6 So的内存和34秒的运行时间。

对于libvips,我看到:

代码语言:javascript
运行
AI代码解释
复制
$ /usr/bin/time -f %M:%e vips tiffsave wtc.jpg vips.tif --tile --pyramid --compression jpeg
53148:1.95

53mb的内存和2s的运行时间。它的速度提高了15倍,需要的内存减少了30倍。它也可以制作更小的金字塔:

代码语言:javascript
运行
AI代码解释
复制
$ ls -l vips.tif im.tif 
-rw-r--r-- 1 john john 60672180 Mar  7 23:12 im.tif
-rw-r--r-- 1 john john 21419592 Mar  7 23:13 vips.tif

convert不启用YCbCr模式,因此金字塔要大3倍。它们在iipimage中应该工作得很好。

libvips还会自动为你拉平透明度。

这些文档遍历了tiffsave的所有选项:

https://libvips.github.io/libvips/API/current/VipsForeignSave.html#vips-tiffsave

票数 1
EN

Stack Overflow用户

发布于 2015-03-02 18:23:23

首先,通过检查它们是否能够在其他图像查看器中打开,确保“损坏的图片”实际上没有损坏。

其次,我同意您的怀疑,即它与-compress jpeg选项有关。原因是您的“损坏”图像包含透明度(请参阅JPEG行),而Extra Samples: 1<unassoc-alpha>格式不支持存储具有透明度(alpha)的图像。

有关从图像文件中删除透明度的信息,请参阅this other post

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23159794

复制
相关文章
EntityFrameWork实现部分字段获取和修改(含源码)
  EntityFrameWork类库,是微软推出的ORM组件,它是基于Ado.Net的,个人感觉还是非常 好用的。以下介绍的2个功能点分别是部分字段更新和获取   解决部分字段Update。本方案采
用户1219352
2018/02/01
1.1K0
EntityFrameWork实现部分字段获取和修改(含源码)
定义枚举的构造函数、方法和字段
import org.junit.Test; public class lan { @Test public void test(){ print(Grade.D); } public void print(Grade g) { String valueString = g.getValue(); System.out.println(valueString); } }
MonroeCode
2018/01/11
1.2K0
自定义枚举 --- MyBatis字段映射
ps: 参考资料写得特别好,我之所以重新写了一下,是资料写得有点啰嗦,比如子类的注册,其实都是自动的,不需要再额外配置
十毛
2019/03/27
2.2K0
MVC 5 Scaffolder + EntityFramework+UnitOfWork Pattern 代码生成工具集成Visual Studio 2013
MVC 5 Scaffolder + EntityFramework+UnitOfWork Pattern 代码生成工具 经过一个多星期的努力总算完成了单表,多表关联(一对多,多对一)的增删改查的代码生成,基本上可以实现不用添加任何代码完成对数据表的操作。 下个阶段打算集成.net 4.5的认证和授权已经用户注册和角色管理 一旦有更好的方式我会把它集成到模板中实现自动生成。所以很希望得到大家的帮助。在这里我先抛砖引玉了。 asp.net MVC 5 Scaffolding多层架构代码生成向导开源项目(邀请你
阿新
2018/04/12
1.4K0
MVC 5 Scaffolder + EntityFramework+UnitOfWork Pattern 代码生成工具集成Visual Studio 2013
如何处理PHP代码中的枚举类型enum?
我们有时使用常量来定义代码中的一些常量值。它们被用来避免魔法价值。我们可以用一个符号名称替换一些魔法值来赋予它一些意义。然后我们在代码中引用符号名。因为我们定义了一次并多次使用它,所以搜索它以及以后重命名或更改值会更容易。
叫我可儿呀
2019/12/05
1.6K0
EntityFramework附加实体
//0.0创建修改的 实体对象 Models.BlogArticle model = new BlogArticle(); model.AId = 12; model.ATitle = "新的数据"; model.AContent = "新的数据~~~~~"; //0.1添加到EF管理容器中,并获取 实体对象 的伪包装类对象 DbEntityEntry<Models.BlogArticle> entry = db.Entry<Models.BlogArticle>(model); //**如果使用 En
liulun
2018/01/12
7710
EntityFramework快速上手
什么是Entity Framework 微软官方提供的ORM工具,ORM让开发人员节省数据库访问的代码时间,将更多的时间放到业务逻辑层代码上。EF提供变更跟踪、唯一性约束、惰性加载、查询事物等。开发人员使用Linq语言,对数据库操作如同操作Object对象一样省事。 EF有三种使用场景: 从数据库生成Class, 由实体类生成数据库表结构, 通过数据库可视化设计器设计数据库,同时生成实体类。 O/RM是什么? ORM 是将数据存储从域对象自动映射到关系型数据库的工具。ORM主要包括3个部分:域对象、
李郑
2018/03/01
1.9K0
EntityFramework快速上手
领域对象映射到微服务代码模型
以保证领域模型和微服务的一体性。但在构建领域模型时,我们往往是在业务视角,并且有些领域对象还带业务语言。我们还需要将领域模型作为微服务设计的输入,对领域对象进行设计和转换,让领域对象与代码对象建立映射关系。
JavaEdge
2021/02/23
3970
领域对象映射到微服务代码模型
Java中的枚举Enum
如果我要定义这样一个枚举类,让它能够返回对应日期的中文怎么办?我们可以定义枚举中的成员函数。
卡尔曼和玻尔兹曼谁曼
2019/01/25
1.1K0
枚举进程中的模块
在Windows中枚举进程中的模块主要是其中加载的dll,在VC上主要有2种方式,一种是解析PE文件中导入表,从导入表中获取它将要静态加载的dll,一种是利用查询进程地址空间中的模块,根据模块的句柄来得到对应的dll,最后再补充一种利用Windows中的NATIVE API获取进程内核空间中的模块,下面根据给出这些方式的具体的代码片段:
Masimaro
2018/08/31
1.7K0
Python 中的枚举类型
你好,我是 征哥,今天分享一下 Python 中的枚举类型,为什么需要枚举类型,及如何使用。
somenzz
2022/10/25
9860
Python中的枚举类型
>>> from enum import Enum #导入模块中的类 >>> class Color(Enum): #创建自定义枚举类 red = 1 blue = 2 green = 3 >>> Color.red #访问枚举类的成员 <Color.red: 1> >>> type(Color.green) #查看枚举类成员的类型 <enum 'Color'> >>> isinstance(Color.red, Color) True >>> x = dict() >>>
Python小屋屋主
2018/04/16
1.2K0
一首诗的代码
#include <stdio.h> #include <stdlib.h> #include <windows.h> int one1=1,one2=1,one3=1,one4=1,one5=1,one6=1; void color1() { system("color F4"); Sleep(500); } void color2() { system("color FC"); Sleep(500); } void ai_1(int a,int b,int i) {
谙忆
2021/01/19
2820
MyBatis数据库字段映射Java枚举 顶
有时候我们需要将数据库的字段对Java的枚举类型进行映射,比如说我们有一个汽车配件类型的枚举
算法之名
2019/08/20
1.8K0
MyBatis数据库字段映射Java枚举
                                                                            顶
ts中枚举
填坑,官方文档:https://www.tslang.cn/docs/handbook/enums.html
阿超
2022/08/21
5490
ts中枚举
Rust中的Result枚举
Result枚举在Rust中是使用频率极高的一个类型,常用于函数的返回值定义,其源码如下:
菩提树下的杨过
2021/11/30
1.3K0
Rust中的Result枚举
c++枚举类型enum输出_python中的枚举
Enum枚举:枚举是一组命名整型常量,枚举类型是使用 enum 关键字声明的。枚举是值类型,数据直接存储在栈中,而不是使用引用和真实数据的隔离方式来存储,其包含自己的值,且不能被继承或者传递继承,枚举中每个元素的基础类型是 int。可以使用冒号指定另一种整数值类型。
全栈程序员站长
2022/10/01
1.6K0
c++枚举类型enum输出_python中的枚举
Java5 枚举(Enum)
enum的全称为 enumeration, 是 JDK 1.5 中引入的新特性。在Java中,被enum关键字修饰的类型就是枚举类型,此类继承了Enum类,形式如下:
HLee
2021/05/26
1.2K0
Java5 枚举(Enum)
你是如何处理 PHP 代码中的枚举类型 Enum 的?
本文旨在提供一些更好的理解什么是枚举,什么时候使用它们以及如何在php中使用它们.
猿哥
2019/10/13
1.5K0
C# 中的“智能枚举”:如何在枚举中增加行为
在这个示例中,我们定义了一个名为 Weekday 的枚举,其中包括每个星期的日子。然后在 Main 方法中,我们将 today 变量设置为 Tuesday,并使用 ToString() 方法将其转换为字符串。
郑子铭
2023/08/30
4190
C# 中的“智能枚举”:如何在枚举中增加行为

相似问题

动画RecyclerView高度

12

动画化TextView的高度增加

26

Android属性动画:如何增加视图高度?

7153

安卓动画增加ImageButton的高度

12

高度动画不起作用

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档