Stable Diffusion 和 Comfyui 的 exif 分析

概述

众所周知,无论是Stable Diffusion或者 Comfyui 生成的图片,在 exif 区域都会带上 prompt seed等信息
如果是Comfyui ,还会带上 workflow
那么对于 png 图片而言,这些信息到底是存放在哪里的呢?本文来简单的研究一下

010

首先使用 010 editor 打开,加载 PNG 模板分析一下数据区域


image.png

模板运行完成之后,就可以看到png的数据块了

Comfyui

image.png

如图所示, Comfyui 会保存两个 tEXt chunk 区

  1. prompt = {} 提示词区域, {}是一个json 字符串
  2. workflow = {} 工作流区域

Stable Diffusion

两种场景,猜测是和 Stable Diffusion 版本有关
一个在 iTXt, 一个在 eXTt


image.png
image.png

golang

使用 golang 代码读取 png exif 的话,demo 如下

package main

import (
    "fmt"
    "log"
    png "github.com/dsoprea/go-png-image-structure"
)

func main() {
    ReadPic("sd.png")
    ReadPic("comfyui.png")
}

func ReadPic(name string) {
    pmp := png.NewPngMediaParser()
    intfc, err := pmp.ParseFile(name)
    if err != nil {
        log.Println("read file", err)
        return
    }

    cs := intfc.(*png.ChunkSlice)
    for _, ch := range cs.Chunks() {
        if ch.Type == "tEXt" || ch.Type == "iXTt" {
            fmt.Println(string(ch.Data))
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容