Как определить png «тип» (png8 / png24) - PullRequest
0 голосов
/ 03 марта 2020

Я использую пакет image для декодирования изображений и определения их формата (например, jpg или png), однако я увеличу sh до go на один уровень глубже, и я хотел бы сказать, действительно ли png является png8 или 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")

1 Ответ

1 голос
/ 07 марта 2020

Попробуйте, просто имейте в виду, что без проверки работоспособности

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)
}

Вы можете проверить характеристики для справки

...