关于金字塔格式转tiff并且openslide能获取到缩略图等标签信息

news2025/1/22 18:47:29

我们都知道openslide通过openslide_get_associated_image_names获取相关的图像名称,比如"thumbnail",“label”,“macro"等。那我们将"thumbnail”,“label”,"macro"写入tiff的时候,如何才能保证openslide能够获取到呢?
下面是openslide的部分源码:

do {
    tdir_t dir = TIFFCurrentDirectory(tiff);
    if (TIFFIsTiled(tiff)) {
      ...
    } else {
      // associated image
      const char *name = (dir == 1) ? "thumbnail" : NULL;
      if (!add_associated_image(osr, name, tc, tiff, err)) {
	goto FAIL;
      }
      //g_debug("associated image: %d", dir);
    }
  } while (TIFFReadDirectory(tiff));

可以看到,openslide判断当前目录如果非tile块状结构,并且属于从下往上的第2层目录(dir == 1),则将该目录作为缩略图(“thumbnail”);并且通过add_associated_image添加该标签,添加后就能通过openslide_get_associated_image_names获取到了。

接下来再来看看add_associated_image的部分源码:

static bool add_associated_image(openslide_t *osr,
                                 const char *name_if_available,
                                 struct _openslide_tiffcache *tc,
                                 TIFF *tiff,
                                 GError **err) {
  char *name = NULL;
  if (name_if_available) {
    name = g_strdup(name_if_available);
  } else {
    char *val;

    // get name
    if (!TIFFGetField(tiff, TIFFTAG_IMAGEDESCRIPTION, &val)) {
      return true;
    }

    // parse ImageDescription, after newline up to first whitespace -> gives name
    char **lines = g_strsplit_set(val, "\r\n", -1);
    if (!lines) {
      return true;
    }

    if (lines[0] && lines[1]) {
      char *line = lines[1];

      char **names = g_strsplit(line, " ", -1);
      if (names && names[0]) {
	name = g_strdup(names[0]);
      }
      g_strfreev(names);
    }

    g_strfreev(lines);
  }

  if (!name) {
    return true;
  }

  bool result = _openslide_tiff_add_associated_image(osr, name, tc,
                                                     TIFFCurrentDirectory(tiff),
                                                     err);
  g_free(name);
  return result;
}

如果传入的name_if_available参数为NULL,则通过参数TIFFTAG_IMAGEDESCRIPTION获取当前目录的描述信息val,将val通过换行符\r和\n进行拆分得到字符串数组lines,如果lines个数大于1,则再将lines[1]通过空格进行拆分得到字符串数组names,如果names不为空则将names[0]作为标签写入tiff。
这下我们知道了,因此我们在往tiff文件中写入标签时,准确的添加该标签的描述信息就可以了,比如我要添加宏观图“macro”:

TIFFSetField(_tiff, TIFFTAG_IMAGEDESCRIPTION, "Aperio\rmacro");

下面是我写的转tiff的工具,支持"thumbnail",“label”,"macro"三种标签的写入。支持的格式包括江丰(kfb),麦克奥迪(mdsx),优纳(tmap),svs,vsi,lif等十几种格式。

在这里插入图片描述
工具下载地址:转TIFF工具下载链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/105525.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2022年第三届MathorCup高校数学建模挑战赛——大数据竞赛 赛道B 北京移动用户体验影响因素研究 建模方案及代码实现(更新中)

【BetterBench原创】2022年第三届MathorCup高校数学建模挑战赛——大数据竞赛 赛道B 北京移动用户体验影响因素研究 建模方案及代码实现(更新中) 更新进展 2022年12月20日 22:00 发布初步思路 (待更新)发布初步思路实现代码 …

即时通讯音视频开发视频编解码预测技术

目的是去除空间冗余和时间冗余。因为视频存在大量的空间冗余和时间冗余,包括空间冗余、时间冗余,预测后得到去除大部分空间或时间冗余的残差。 图像空间相邻像素具有很强的相关性,帧内预测技术去除空间冗余。 视频图像在时间上有较强的相关性…

组团出海抢抓跨境电商外贸,有利于2023“开门稳”

组团出海抢抓跨境电商外贸,有利于2023“开门稳” 我国是货物贸易第一大国,强大的生产能力、出色的产业配套、完善的物流供应、充足高效的劳动力,都为我国成为贸易强国提供了有利条件。 近几年,中国跨境电商产业进入快速发展阶段&a…

区块链北大肖老师学习笔记4

第五节 比特币系统的实现 区块链是去中心化的账本,比特币使用的是基于交易的这种账本模式(transaction[交易]-based ledger[账本])。系统当中并不会显示每个账户有多少钱。 比特币系统的全节点要维护一个叫UTXO(unspent transaction output)(还没有被花出去的交易的…

成为2.2亿儿童主动要吃的天然营养,AMSTRONG维小壮做对了什么?

文|螳螂观察(TanglangFin) 随着疫情防控政策的调整,在人们开始注重提升身体免疫力以抗击病毒的措施中,在国外流行多年的接骨木莓,开始受到国内消费者的青睐。 接骨木莓的功效早已被美国FDA和加拿大FDA双重认证&#…

VUE3-Pinia的使用《三》

pinia的官网是简介 | Pinia。 它的功能和vuex差不多,但是pinia更加优于vuex。主要用于状态管理,管理全局的变量,也可以存储页面A的值,然后在页面B中直接访问,不分父子组件之间的关系,可以任意传值&#xf…

设计模式之状态模式

State design pattern 状态模式的概念、状态模式的结构、状态模式的优缺点、状态模式的使用场景、状态模式的实现示例、状态模式的源码分析 1、状态模式的概念 对有状态的对象,把复杂的判断逻辑提取到不同的状态对象中,允许状态对象在其内部状态发生改变…

使用预授权签名加速 BSV 有状态合约更新

状态更新竞争 BSV 智能合约将状态存储在交易链的输出中。 当交易花费包含旧状态的输出并创建包含新状态的输出时,就会发生状态转换。 在任何给定时间,交易链末端的单个输出/UTXO 都具有最新状态。 当多个事务竞争同时更新共享状态时,就会出…

Anchor2

Anchor也是第二季了~~ 来一起来学习Faster R-CNN中的RPN及Anchor 说到RPN和Anchor,应该立马就能想到Faster R-CNN网络框架 首先我先将几类经典的目标检测网络做一个对比,然后开始说说今天要讲的知识。 最开始出现的是R-CNN,如下图&#xff…

什么是编程?程序员主要做啥工作?如何学习呢?

对编程的理解 编程换成通俗的语言可以理解为使用一些英文单词组成的指令发送给计算机,做指定的事情。 编程的种类 如今在互联网市场中,编程的工作一共分为了3大类: 前端编程 后台编程 运维编程 前端编程: 什么是前端&#…

门诊地图导航怎么做,零成本的医院室内导航解决方案

现在很多医院都比较大,科室众多,往往让人不知道要找的科室在哪里,不了解看病的流程,只能去咨询台询问,费时又费力……电子地图作为大家最喜闻乐见的高效应用形式,可高效为病患提供导医服务,并为…

XML介绍和基本用法(一文彻底搞懂XML!)

文章目录1.XML1.1概述1.2标签的规则1.3语法规则1.4xml解析1.5DTD约束1.6schema约束1.XML 1.1概述 万维网联盟(W3C) 万维网联盟(W3C)创建于1994年,又称W3C理事会。1994年10月在麻省理工学院计算机科学实验室成立。 建立者: Tim Berners-Lee (蒂姆伯纳斯李…

智能图像水位识别监测 基于OpenCv

智能图像水位识别监测利用OpenCVyolo网络学习模型对河道江河湖泊等区域进行实时监测,当监测到水位刻度尺超标时立即抓拍。OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉处理开源软件库,支持与计算机视觉和机器…

【Linux】编辑器的天花板vim

​🌠 作者:阿亮joy. 🎆专栏:《学会Linux》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录👉前言&…

14.SpringAop

1. Aop简介 AOP(Aspect Oriented Programming)面向切面编程,一种编程范式,指导开发者如何组织程序结构 OOP(Object Oriented Programming)面向对象编程 作用:在不惊动原始设计的基础上为其进行功能增强。简单的说就是在不改变方法源代码的基…

C语言必背18个经典程序

1、/*输出9*9口诀。共9行9列&#xff0c;i控制行&#xff0c;j控制列。*/ #include "stdio.h" main() {int i,j,result;for(i1;i<10;i){for(j1;j<10;j){resulti*j;printf("%d*%d%-3d",i,j,result);/*-3d表示左对齐&#xff0c;占3位*/}printf("…

数字化转型必读书籍:27个案例让小白也能搞懂以中台战略主导的数字化转型产品建设

各位茶馆的读者朋友们大家好&#xff0c;一转眼《中台产品经理宝典》一书已经上市了2年半&#xff0c;在这期间创造了近2万册的销售记录&#xff0c;并多次冲上各大网站的销售记录。 就在今年双十一还创造了当当网细分类目销量第71名的成绩&#xff0c;这对一本已经出版了2年半…

LeetCode题解 15 (5,96) 最长回文子串,不同的二叉搜索树

文章目录最长回文子串代码解答&#xff1a;不同的二叉搜索树代码解答&#xff1a;最长回文子串 首先我们应该先了解什么是回文子串: 单个字符 例如 a 这也是回文字符串 2个字符 aa 或者 bb 这也是回文字符串 3个字符 aba 或者 bab 多个字符 abba ababa 这些也被叫做回文子串 从…

【源码透视】SpringBoot的SPI机制

一、从java类加载机制说起 java中的类加载器负载加载来自文件系统、网络或者其他来源的类文件。jvm的类加载器默认使用的是双亲委派模式。三种默认的类加载器Bootstrap ClassLoader、Extension ClassLoader和System ClassLoader&#xff08;Application ClassLoader&#xff09…

开源项目 Spartacus 的 git 提交流程规范

Spartacus 开源项目由一组库组成。为了更容易知道哪个版本的库与另一个版本兼容&#xff0c;库版本在所有包中同步。 这意味着当我们要发布 1.5.0 版本时&#xff0c;我们会发布该版本下的所有库&#xff0c;即使某些库与上一个版本相比没有任何变化。 这样一来&#xff0c;我们…