概述
众所周知,无论是Stable Diffusion
或者 Comfyui
生成的图片,在 exif
区域都会带上 prompt
seed
等信息
如果是Comfyui
,还会带上 workflow
那么对于 png 图片而言,这些信息到底是存放在哪里的呢?本文来简单的研究一下
010
首先使用 010 editor 打开,加载 PNG 模板分析一下数据区域
image.png
模板运行完成之后,就可以看到png的数据块了
Comfyui
image.png
如图所示, Comfyui 会保存两个 tEXt
chunk 区
-
prompt = {}
提示词区域,{}
是一个json 字符串 -
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))
}
}
}