image - 如何确定 png“类型”(png8 / png24)
问题描述
我正在使用该image
包来解码图像并确定它们的格式(例如 jpg 或 png),但是我希望更深入地了解 png 是否实际上是 apng8
或png24
.
使用 Go 执行此操作的正确方法是什么?
(更新 1)
目前我正在阅读能够解码图像,我想知道如何从这里获取颜色模型:
fname := "img.jpg"
f, err := os.Open(fname)
_, format, err := image.Decode(f)
if err != nil {
log.Fatal(err)
}
fmt.Println(format, "format")
解决方案
试试这个,只要记住它没有健全性检查
package main
import (
"errors"
"fmt"
_ "image/png"
"os"
)
func pngType(f *os.File) (string, error) {
f.Seek(24, 0)
b := make([]byte, 1)
f.Read(b)
c := make([]byte, 1)
f.Read(c)
bitDepth := b[0]
colorType := c[0]
if bitDepth == 8 && colorType == 3 {
return "PNG8", nil
}
if bitDepth == 8 && colorType == 2 {
return "PNG24", nil
}
if bitDepth == 8 && colorType == 6 {
return "PNG32", nil
}
return "", errors.New("unknown_type")
}
func main() {
f, _ := os.Open("img.png")
t, _ := pngType(f)
fmt.Printf("The type is `%s`.\n", t)
}
您可以查看规格以供参考
推荐阅读
- shell - 使用 shell 脚本调用 SNS ansible 脚本
- vba - 交换字符在单元格中的位置
- c# - 无法删除具有要查看的导航属性的实体
- php - 当我的页面在 Wordpress 中加载时如何自动向下滚动?
- bash - 从 bash 脚本运行 groovy 脚本
- reporting-services - SSRS 查询测试用例结果
- phpstorm - PhpStorm 和 Xdebug 不工作
- sql - ORA-29913: 执行 ODCIEXTTABLEOPEN 标注时出错
- angular - 添加插值时的链接问题
- javascript - 在 before() 中使用 .then 时无法期待 chakram 中的状态