C和GO之间的图像大小不匹配

时间:2015-09-14 17:52:53

标签: c image go

读取图像并计算其字节大小会在C与Go中产生不同的结果:

使用相同的图像,这是我在c:

中的readFile函数
FILE *inputFile = fopen(inputFilename, "rb");
if (inputFile == NULL)
{
    printf("cannot open file %s", inputFilename);
    return 0;
}
else
{
    fseek(inputFile, 0, SEEK_END);
    long fsize = ftell(inputFile);
    rewind(inputFile);
    return(fsize);
}

在Go中,相同的图像:

// requests the same image as above
req, _ := http.NewRequest("GET", url, nil)

resp, _ := client.Do(req)

// Read the image into memory and set up the bytes buffer
img, err := ioutil.ReadAll(resp.Body)
if err != nil {
    return err
}

size := len(img)
fmt.Println("%s\n", size)
return size

图像的C长度为:2275674 在Go中,大小为:1901248

1 个答案:

答案 0 :(得分:-3)

在C中,您正在阅读原始文件。它不被解释为图像文件,只是一个字节集合。

在Go(我实际上并不熟悉)中,您似乎正在使用图像加载器,它将数据解释为图像,解码它(如果它被压缩则解压缩),给出DECODED图像的大小

这两者通常会有所不同(可能除了一些原始图像类型外)。