когда кодирую png в base64 и затем превращаю его обратно в pixbuf, я получаю ошибку неизвестного формата - PullRequest
0 голосов
/ 18 июня 2019

Я пытался работать с картинками в формате base64 в vala. Но у меня проблемы. Я написал небольшую программу Vala, которая показывает проблему:

Я могу легко загрузить файл изображения. Я могу преобразовать его в байты, из байтов в массив uchar, из этого в строку в кодировке base64 и обратно в байты и проанализировать его в MemoryInputStream. Но когда я анализирую это в Pixbuf, он говорит мне, что формат не распознан. Затем я могу запустить bytes.compare (reversed_bytes), чтобы увидеть, что содержимое там точно такое же. MemoryInputStream как-то неправильно читает?

Во всяком случае, вот пример программы:

using Gdk;

static void main(string[] args){

        string path = "%s".printf(args[1]);

        Pixbuf original_pixbuf = new Gdk.Pixbuf.from_file(path);

        test_pixbuf_from_b64(original_pixbuf);

}

public void test_pixbuf_from_b64(Pixbuf original_pixbuf){
    Bytes bytes = original_pixbuf.pixel_bytes;

    var uchar_array = bytes.get_data();

    string base64_string = Base64.encode(uchar_array);

    var reversed_uchar_array = Base64.decode(base64_string);

    Bytes reversed_bytes = new Bytes(reversed_uchar_array);


    //Lets test the contents of the bytes to see they are equal

    if(bytes.compare(reversed_bytes) == 0){
        print("The reversed bytes value is the same as the original!\n");
    }else{
        print("The value of reversed bytes is different from the original!\n");
    }

    MemoryInputStream mis = new MemoryInputStream.from_bytes(reversed_bytes);

    try{
        Pixbuf reversed_pixbuf = new Pixbuf.from_stream(mis); //This fails, with a format not recognized error. Why though?
    }catch(Error er){
        stdout.printf("The following error occurred when recreating the pixbuf: %s", er.message);
    }
}

Компилировать с:

valac t.vala --pkg=gdk-pixbuf-2.0

запустить с:

./t "path/to/image/file/here"

Я не могу продолжать свой проект, пока не пойму это.

...