Manipulasi container RIFF untuk gambar WebP.
API Mux
Memungkinkan manipulasi gambar container WebP, yang berisi fitur seperti warna profil, metadata, animasi, dan gambar terfragmentasi.
Contoh Kode
Membuat MUX dengan Data Gambar, Profil Warna, dan Metadata XMP
int copy_data = 0;
WebPMux* mux = WebPMuxNew();
// ... (Prepare image data).
WebPMuxSetImage(mux, &image, copy_data);
// ... (Prepare ICCP color profile data).
WebPMuxSetChunk(mux, "ICCP", &icc_profile, copy_data);
// ... (Prepare XMP metadata).
WebPMuxSetChunk(mux, "XMP ", &xmp, copy_data);
// Get data from mux in WebP RIFF format.
WebPMuxAssemble(mux, &output_data);
WebPMuxDelete(mux);
// ... (Consume output_data; e.g. write output_data.bytes to file).
WebPDataClear(&output_data);
Mendapatkan Data Profil Gambar dan Warna dari File WebP
int copy_data = 0;
// ... (Read data from file).
WebPMux* mux = WebPMuxCreate(&data, copy_data);
WebPMuxGetFrame(mux, 1, &image);
// ... (Consume image; e.g. call WebPDecode() to decode the data).
WebPMuxGetChunk(mux, "ICCP", &icc_profile);
// ... (Consume icc_data).
WebPMuxDelete(mux);
free(data);
Kehidupan Objek Mux
Enum
// Error codes
typedef enum WebPMuxError {
WEBP_MUX_OK = 1,
WEBP_MUX_NOT_FOUND = 0,
WEBP_MUX_INVALID_ARGUMENT = -1,
WEBP_MUX_BAD_DATA = -2,
WEBP_MUX_MEMORY_ERROR = -3,
WEBP_MUX_NOT_ENOUGH_DATA = -4
} WebPMuxError;
// IDs for different types of chunks.
typedef enum WebPChunkId {
WEBP_CHUNK_VP8X, // VP8X
WEBP_CHUNK_ICCP, // ICCP
WEBP_CHUNK_ANIM, // ANIM
WEBP_CHUNK_ANMF, // ANMF
WEBP_CHUNK_ALPHA, // ALPH
WEBP_CHUNK_IMAGE, // VP8/VP8L
WEBP_CHUNK_EXIF, // EXIF
WEBP_CHUNK_XMP, // XMP
WEBP_CHUNK_UNKNOWN, // Other chunks.
WEBP_CHUNK_NIL
} WebPChunkId;
WebPGetMuxVersion()
Menampilkan nomor versi library mux, yang dikemas dalam heksadesimal menggunakan
8 bit untuk setiap besar/kecil/revisi. Misalnya, v2.5.7 adalah 0x020507
.
int WebPGetMuxVersion(void);
WebPMuxNew()
Membuat objek mux kosong.
WebPMux* WebPMuxNew(void);
- Hasil
- Pointer ke objek mux kosong yang baru dibuat.
WebPMuxDelete()
Menghapus objek mux.
void WebPMuxDelete(WebPMux* mux);
- Parameter
- mux -- objek (in/out) yang akan dihapus
Pembuatan Mux
WebPMuxCreate()
Membuat objek mux dari data mentah yang diberikan dalam format WebP RIFF.
WebPMux* WebPMuxCreate(const WebPData* bitstream, int copy_data);
- Parameter
bitstream -- (di) data bitstream dalam format WebP RIFF
copy_data -- (di) nilai 1 menunjukkan data yang diberikan AKAN disalin ke multipleks dan nilai 0 menunjukkan data TIDAK akan disalin ke objek mux.
- Hasil
Pointer ke objek mux yang dibuat dari data tertentu - saat berhasil.
NULL -- Jika terjadi error data atau memori yang tidak valid.
Potongan Non-Gambar
WebPMuxSetChunk()
Menambahkan potongan dengan ID fourcc dan data chunk_data di objek mux. Apa saja potongan yang ada dengan id yang sama akan dihapus.
WebPMuxError WebPMuxSetChunk(WebPMux* mux,
const char fourcc[4],
const WebPData* chunk_data,
int copy_data);
Catatan: Hanya potongan yang tidak terkait dengan gambar yang harus dikelola melalui API potongan.
(Potongan terkait gambar adalah: "ANMF", "FRGM", "VP8 ", "VP8L" dan "ALPH"). Untuk menambahkan,
mendapatkan dan menghapus gambar, menggunakan WebPMuxSetImage()
,
WebPMuxPushFrame()
,
WebPMuxGetFrame()
dan
WebPMuxDeleteFrame()
.
- Parameter
mux -- (in/out) objek tempat potongan akan ditambahkan
fourcc -- (dalam) array karakter yang berisi empat karakter dari nilai yang diberikan chunk; misalnya, "ICCP", "XMP", "EXIF" dll.
chunk_data -- (di) potongan data yang akan ditambahkan
copy_data -- (di) nilai 1 menunjukkan data yang diberikan AKAN disalin ke multipleks dan nilai 0 menunjukkan data TIDAK akan disalin ke objek mux.
- Hasil
WEBP_MUX_INVALID_ARGUMENT
-- jika mux, fourcc, atau chunk_data adalah NULL atau jika empatcc sesuai dengan sebuah potongan gambar.WEBP_MUX_MEMORY_ERROR
-- saat terjadi error alokasi memori.WEBP_MUX_OK
-- saat berhasil.
WebPMuxGetChunk()
Mendapatkan referensi ke data potongan dengan ID fourcc dalam objek mux. Pemanggil TIDAK boleh mengosongkan data yang ditampilkan.
WebPMuxError WebPMuxGetChunk(const WebPMux* mux,
const char fourcc[4],
WebPData* chunk_data);
- Parameter
mux -- (in) tempat data potongan akan diambil
fourcc -- (in) array karakter yang berisi empat karakter dari potongan tersebut; misalnya, "ICCP", "XMP", "EXIF" dll.
chunk_data -- (keluar) menampilkan potongan data
- Hasil
WEBP_MUX_INVALID_ARGUMENT
-- jika mux, fourcc, atau chunk_data adalah NULL atau jika empatcc sesuai dengan sebuah potongan gambar.WEBP_MUX_NOT_FOUND
-- Jika mux tidak berisi potongan dengan ke ID tertentu.WEBP_MUX_OK
-- saat berhasil.
WebPMuxDeleteChunk()
Menghapus potongan dengan fourcc yang ditentukan dari objek mux.
WebPMuxError WebPMuxDeleteChunk(WebPMux* mux, const char fourcc[4]);
- Parameter
mux -- (in/out) objek tempat potongan tersebut akan dihapus
fourcc -- (in) array karakter yang berisi empat karakter dari potongan tersebut; misalnya, "ICCP", "XMP", "EXIF" dll.
- Hasil
WEBP_MUX_INVALID_ARGUMENT
-- jika mux atau fourcc adalah NULL atau jika fourcc sesuai dengan sebuah potongan gambar.WEBP_MUX_NOT_FOUND
-- Jika mux tidak berisi potongan dengan empat kubik.WEBP_MUX_OK
-- saat berhasil.
Gambar
Mengenkapsulasi data tentang satu frame/fragmen.
struct WebPMuxFrameInfo {
WebPData bitstream; // image data: can be a raw VP8/VP8L bitstream
// or a single-image WebP file.
int x_offset; // x-offset of the frame.
int y_offset; // y-offset of the frame.
int duration; // duration of the frame (in milliseconds).
WebPChunkId id; // frame type: should be one of WEBP_CHUNK_ANMF,
// WEBP_CHUNK_FRGM or WEBP_CHUNK_IMAGE
WebPMuxAnimDispose dispose_method; // Disposal method for the frame.
WebPMuxAnimBlend blend_method; // Blend operation for the frame.
};
WebPMuxSetImage()
Menetapkan gambar (non-animasi dan tidak terfragmentasi) dalam objek mux. Catatan: Gambar yang ada (termasuk frame/fragmen) akan dihapus.
WebPMuxError WebPMuxSetImage(WebPMux* mux,
const WebPData* bitstream,
int copy_data);
- Parameter
mux -- objek (in/out) tempat gambar akan ditetapkan
bitstream -- (in) dapat berupa bitstream VP8/VP8L mentah atau WebP gambar tunggal file (non-animasi dan tidak terfragmentasi)
copy_data -- (di) nilai 1 menunjukkan data yang diberikan AKAN disalin ke multipleks dan nilai 0 menunjukkan data TIDAK akan disalin ke objek mux.
- Hasil
WEBP_MUX_INVALID_ARGUMENT
-- jika mux adalah NULL atau bitstream adalah NULL.WEBP_MUX_MEMORY_ERROR
-- saat terjadi error alokasi memori.WEBP_MUX_OK
-- saat berhasil.
WebPMuxPushFrame()
Menambahkan frame di akhir objek mux.
WebPMuxError WebPMuxPushFrame(WebPMux* mux,
const WebPMuxFrameInfo* frame,
int copy_data);
Catatan:
- frame.id harus salah satu dari
WEBP_CHUNK_ANMF
atauWEBP_CHUNK_FRGM
- Untuk mengatur gambar non-animasi non-fragmen, gunakan
WebPMuxSetImage()
saja. - Jenis frame yang didorong harus sama dengan frame dalam mux.
- Karena WebP hanya mendukung offset genap, offset ganjil akan diikat ke lokasi genap menggunakan: offset &= ~1
- Parameter
mux -- objek (in/out) yang akan ditambahi frame
frame -- (dalam) data frame.
copy_data -- (di) nilai 1 menunjukkan data yang diberikan AKAN disalin ke multipleks dan nilai 0 menunjukkan data TIDAK akan disalin ke objek mux.
- Hasil
WEBP_MUX_INVALID_ARGUMENT
-- jika mux atau frame NULL atau jika konten frame tidak valid.WEBP_MUX_MEMORY_ERROR
-- saat terjadi error alokasi memori.WEBP_MUX_OK
-- saat berhasil.WEBP_MUX_MEMORY_ERROR
-- saat terjadi error alokasi memori.
WebPMuxGetFrame()
Mendapatkan frame ke-n dari objek mux. Konten frame->bitstream
dialokasikan menggunakan malloc(), dan TIDAK dimiliki oleh objek mux. HARUS
dibatalkan alokasinya oleh pemanggil dengan memanggil WebPDataClear()
. nth=0
memiliki arti khusus - posisi terakhir.
WebPMuxError WebPMuxGetFrame(const WebPMux* mux,
uint32_t nth,
WebPMuxFrameInfo* frame);
- Parameter
mux -- (in) objek tempat info diambil
nth -- indeks (in) frame di objek mux
frame -- (keluar) data dari frame yang ditampilkan
- Hasil
WEBP_MUX_INVALID_ARGUMENT
-- if mux or frame is NULL.WEBP_MUX_NOT_FOUND
-- jika ada kurang dari frame ke-n dalam mux .WEBP_MUX_BAD_DATA
-- jika potongan frame ke-n dalam mux tidak valid.WEBP_MUX_OK
-- saat berhasil.
WebPMuxDeleteFrame()
Menghapus frame dari objek mux. nth=0 memiliki arti khusus - terakhir posisi Anda.
WebPMuxError WebPMuxDeleteFrame(WebPMux* mux, uint32_t nth);
- Parameter
mux -- objek (in/out) tempat frame akan dihapus
nth -- (in) Posisi tempat frame akan dihapus
- Hasil
WEBP_MUX_INVALID_ARGUMENT
-- if mux is NULL.WEBP_MUX_NOT_FOUND
-- Jika ada kurang dari frame ke-n dalam mux sebelum dihapus.WEBP_MUX_OK
-- saat berhasil.
Animasi
Parameter Animasi
struct WebPMuxAnimParams {
uint32_t bgcolor; // Background color of the canvas stored (in MSB order) as:
// Bits 00 to 07: Alpha.
// Bits 08 to 15: Red.
// Bits 16 to 23: Green.
// Bits 24 to 31: Blue.
int loop_count; // Number of times to repeat the animation [0 = infinite].
};
WebPMuxSetAnimationParams()
Menetapkan parameter animasi dalam objek mux. Setiap potongan ANIM yang ada akan dihapus.
WebPMuxError WebPMuxSetAnimationParams(WebPMux* mux,
const WebPMuxAnimParams* params);
- Parameter
mux -- objek (in/out) tempat potongan ANIM akan disetel/ditambahkan
params -- (in) parameter animasi.
- Hasil
WEBP_MUX_INVALID_ARGUMENT
-- jika mux atau parameter adalah NULL.WEBP_MUX_MEMORY_ERROR
-- saat terjadi error alokasi memori.WEBP_MUX_OK
-- saat berhasil.
WebPMuxGetAnimationParams()
Mendapatkan parameter animasi dari objek mux.
WebPMuxError WebPMuxGetAnimationParams(const WebPMux* mux,
WebPMuxAnimParams* params);
- Parameter
mux -- (in) tempat parameter animasi akan diambil
params -- (keluar) parameter animasi yang diekstrak dari potongan ANIM
- Hasil
WEBP_MUX_INVALID_ARGUMENT
-- jika mux atau parameter adalah NULL.WEBP_MUX_NOT_FOUND
-- jika potongan ANIM tidak ada dalam objek mux.WEBP_MUX_OK
-- saat berhasil.
Lainnya Utilitas
WebPMuxGetCanvasSize()
Mendapatkan ukuran kanvas dari objek mux.
WebPMuxError WebPMuxGetCanvasSize(const WebPMux* mux,
int* width,
int* height);
Catatan: Metode ini mengasumsikan bahwa potongan VP8X, jika ada, sudah yang terbaru.
Yaitu, objek mux belum dimodifikasi
sejak panggilan terakhir ke
WebPMuxAssemble()
atau WebPMuxCreate()
.
- Parameter
mux -- (in) tempat ukuran kanvas akan diambil
width -- (keluar) lebar kanvas
height -- (keluar) tinggi kanvas
- Hasil
WEBP_MUX_INVALID_ARGUMENT
-- if mux, width or height is NULL.WEBP_MUX_BAD_DATA
-- jika ukuran kanvas atau potongan VP8X/VP8/VP8L tidak valid.WEBP_MUX_OK
-- saat berhasil.
WebPMuxGetFeatures()
Mendapatkan tombol fitur dari objek mux.
WebPMuxError WebPMuxGetFeatures(const WebPMux* mux, uint32_t* flags);
Catatan: Metode ini mengasumsikan bahwa potongan VP8X, jika ada, sudah yang terbaru.
Yaitu, objek mux belum dimodifikasi
sejak panggilan terakhir ke
WebPMuxAssemble()
atau WebPMuxCreate()
.
- Parameter
mux -- (in) tempat fitur akan diambil
flag -- (keluar) flag yang menentukan fitur mana yang ada di mux . Ini akan menjadi OR dari berbagai nilai tanda. Enum
WebPFeatureFlags
dapat digunakan untuk menguji nilai masing-masing penanda.- Hasil
WEBP_MUX_INVALID_ARGUMENT
-- if mux or flags is NULL.WEBP_MUX_BAD_DATA
-- jika ukuran kanvas atau potongan VP8X/VP8/VP8L tidak valid.WEBP_MUX_OK
-- saat berhasil.
WebPMuxNumChunks()
Mendapatkan jumlah potongan yang memiliki nilai tag yang diberikan dalam objek mux.
WebPMuxError WebPMuxNumChunks(const WebPMux* mux,
WebPChunkId id,
int* num_elements);
- Parameter
mux -- (in) objek tempat info diambil
id -- (in) potongan id yang menentukan jenis potongan
num_elements -- (keluar) jumlah potongan dengan id potongan yang diberikan
- Hasil
WEBP_MUX_INVALID_ARGUMENT
-- if mux, or num_elements is NULL.WEBP_MUX_OK
-- saat berhasil.
WebPMuxAssemble()
Menyusun semua potongan dalam format WebP RIFF dan menampilkannya dalam assembled_data. Fungsi ini juga memvalidasi objek mux.
WebPMuxError WebPMuxAssemble(WebPMux* mux, WebPData* assembled_data);
Catatan: Konten assembled_data akan diabaikan dan ditimpa.
Selain itu, konten assembled_data dialokasikan menggunakan malloc(), dan BUKAN
yang dimiliki oleh objek mux. Ini HARUS dibatalkan alokasinya oleh pemanggil dengan memanggil
WebPDataClear()
- Parameter
mux -- objek (in/out) yang potongannya akan disusun
assembled_data -- (keluar) data WebP yang telah disusun
- Hasil
WEBP_MUX_BAD_DATA
-- jika objek mux tidak valid.WEBP_MUX_INVALID_ARGUMENT
-- if mux or assembled_data is NULL.WEBP_MUX_MEMORY_ERROR
-- saat terjadi error alokasi memori.WEBP_MUX_OK
-- saat berhasil.
API WebPAnimEncoder
API ini memungkinkan encoding (mungkin) gambar WebP animasi.
Contoh Kode
WebPAnimEncoderOptions enc_options;
WebPAnimEncoderOptionsInit(&enc_options);
// Tune 'enc_options' as needed.
WebPAnimEncoder* enc = WebPAnimEncoderNew(width, height, &enc_options);
while(<there are more frames>) {
WebPConfig config;
WebPConfigInit(&config);
// Tune 'config' as needed.
WebPAnimEncoderAdd(enc, frame, timestamp_ms, &config);
}
WebPAnimEncoderAdd(enc, NULL, timestamp_ms, NULL);
WebPAnimEncoderAssemble(enc, webp_data);
WebPAnimEncoderDelete(enc);
// Write the 'webp_data' to a file, or re-mux it further.
typedef struct WebPAnimEncoder WebPAnimEncoder; // Main opaque object.
Opsi Global
struct WebPAnimEncoderOptions {
WebPMuxAnimParams anim_params; // Animation parameters.
int minimize_size; // If true, minimize the output size (slow). Implicitly
// disables key-frame insertion.
int kmin;
int kmax; // Minimum and maximum distance between consecutive key
// frames in the output. The library may insert some key
// frames as needed to satisfy this criteria.
// Note that these conditions should hold: kmax > kmin
// and kmin >= kmax / 2 + 1. Also, if kmax <= 0, then
// key-frame insertion is disabled; and if kmax == 1,
// then all frames will be key-frames (kmin value does
// not matter for these special cases).
int allow_mixed; // If true, use mixed compression mode; may choose
// either lossy and lossless for each frame.
int verbose; // If true, print info and warning messages to stderr.
};
WebPAnimEncoderOptionsInit()
Harus selalu dipanggil, untuk menginisialisasi WebPAnimEncoderOptions baru sebelum diubah. Menampilkan false jika versi tidak cocok. WebPAnimEncoderOptionsInit() pasti sudah berhasil sebelum menggunakan enc_options.
- Parameter
- enc_options -- opsi (masuk/keluar) yang digunakan untuk mengenkode animasi
- Hasil
- Benar tentang kesuksesan.
int WebPAnimEncoderOptionsInit(
WebPAnimEncoderOptions* enc_options);
WebPAnimEncoderNew()
Membuat dan melakukan inisialisasi objek WebPAnimEncoder.
- Parameter
width/height -- (in) lebar dan tinggi kanvas animasi.
enc_options -- (dalam) opsi encoding; bisa diberi NULL untuk memilih default yang wajar.
- Hasil
Pointer ke objek WebPAnimEncoder yang baru dibuat, atau NULL jika terjadi error memori.
WebPAnimEncoder* WebPAnimEncoderNew(
int width, int height, const WebPAnimEncoderOptions* enc_options);
WebPAnimEncoderAdd()
Optimalkan frame yang diberikan untuk WebP, lakukan enkode, lalu tambahkan ke WebPAnimEncoder.
Panggilan terakhir ke WebPAnimEncoderAdd harus dilakukan dengan frame = NULL
, yang
menunjukkan bahwa tidak ada lagi {i>
frame<i} yang ditambahkan. Panggilan ini juga digunakan untuk
menentukan durasi {i>frame<i} terakhir.
- Parameter
enc -- (in/out) objek yang akan ditambahi frame.
frame -- data frame (masuk/keluar) dalam format ARGB atau YUV(A). Jika dalam YUV(A), format tersebut akan dikonversi ke ARGB, yang menimbulkan sedikit kerugian.
timestamp_ms -- (in) stempel waktu frame ini dalam milidetik. Durasi dari sebuah {i>frame<i} akan dihitung sebagai "stempel waktu {i>frame <i}berikutnya - stempel waktu {i>frame<i} ini". Oleh karena itu, stempel waktu harus dalam urutan yang tidak menurun.
config -- (dalam) opsi encoding; dapat diteruskan NULL untuk memilih secara default.
- Hasil
Jika error, menampilkan nilai salah dan
frame->error_code
ditetapkan dengan benar. Jika tidak, menampilkan nilai benar.
int WebPAnimEncoderAdd(
WebPAnimEncoder* enc, struct WebPPicture* frame, int timestamp_ms,
const struct WebPConfig* config);
WebPAnimEncoderAssemble()
Susun semua frame yang telah ditambahkan sejauh ini ke bitstream WebP. Panggilan ini harus
diawali dengan panggilan ke WebPAnimEncoderAdd dengan frame = NULL
; jika tidak,
dari frame terakhir akan diperkirakan secara internal.
- Parameter
enc -- (in/out) objek tempat frame disusun.
webp_data -- (keluar) bitstream WebP yang dihasilkan.
- Hasil
Benar tentang kesuksesan.
int WebPAnimEncoderAssemble(WebPAnimEncoder* enc, WebPData* webp_data);
WebPAnimEncoderGetError()
Mendapatkan string error yang sesuai dengan panggilan terbaru menggunakan enc. Tujuan
string yang ditampilkan dimiliki oleh enc dan hanya valid hingga panggilan berikutnya ke
WebPAnimEncoderAdd()
atau
WebPAnimEncoderAssemble()
atau
WebPAnimEncoderDelete()
.
- Parameter
- enc -- (in/out) objek tempat string error akan diambil.
- Hasil
- NULL if enc is NULL. Jika tidak, menampilkan string error jika panggilan ke enc memiliki error, atau string kosong jika panggilan terakhir adalah kesuksesan.
const char* WebPAnimEncoderGetError(WebPAnimEncoder* enc);
WebPAnimEncoderDelete()
Menghapus objek WebPAnimEncoder.
- Parameter
- enc -- (in/out) objek yang akan dihapus
void WebPAnimEncoderDelete(WebPAnimEncoder* enc);
API Demux
Memungkinkan ekstraksi data gambar dan format yang diperluas dari file WebP.
Contoh Kode
Mendemux Data WebP untuk Mengekstrak Semua Frame, Profil ICC, dan Metadata EXIF/XMP
WebPDemuxer* demux = WebPDemux(&webp_data);
uint32_t width = WebPDemuxGetI(demux, WEBP_FF_CANVAS_WIDTH);
uint32_t height = WebPDemuxGetI(demux, WEBP_FF_CANVAS_HEIGHT);
// ... (Get information about the features present in the WebP file).
uint32_t flags = WebPDemuxGetI(demux, WEBP_FF_FORMAT_FLAGS);
// ... (Iterate over all frames).
WebPIterator iter;
if (WebPDemuxGetFrame(demux, 1, &iter)) {
do {
// ... (Consume 'iter'; e.g. Decode 'iter.fragment' with WebPDecode(),
// ... and get other frame properties like width, height, offsets etc.
// ... see 'struct WebPIterator' below for more info).
} while (WebPDemuxNextFrame(&iter));
WebPDemuxReleaseIterator(&iter);
}
// ... (Extract metadata).
WebPChunkIterator chunk_iter;
if (flags & ICCP_FLAG) WebPDemuxGetChunk(demux, "ICCP", 1, &chunk_iter);
// ... (Consume the ICC profile in 'chunk_iter.chunk').
WebPDemuxReleaseChunkIterator(&chunk_iter);
if (flags & EXIF_FLAG) WebPDemuxGetChunk(demux, "EXIF", 1, &chunk_iter);
// ... (Consume the EXIF metadata in 'chunk_iter.chunk').
WebPDemuxReleaseChunkIterator(&chunk_iter);
if (flags & XMP_FLAG) WebPDemuxGetChunk(demux, "XMP ", 1, &chunk_iter);
// ... (Consume the XMP metadata in 'chunk_iter.chunk').
WebPDemuxReleaseChunkIterator(&chunk_iter);
WebPDemuxDelete(demux);
Umur Objek Demux
Enum
typedef enum WebPDemuxState {
WEBP_DEMUX_PARSE_ERROR = -1, // An error occurred while parsing.
WEBP_DEMUX_PARSING_HEADER = 0, // Not enough data to parse full header.
WEBP_DEMUX_PARSED_HEADER = 1, // Header parsing complete,
// data may be available.
WEBP_DEMUX_DONE = 2 // Entire file has been parsed.
} WebPDemuxState;
WebPGetDemuxVersion()
Menampilkan nomor versi library demux, yang dikemas dalam heksadesimal menggunakan
8 bit untuk setiap besar/kecil/revisi. Misalnya, v2.5.7 adalah 0x020507
.
int WebPGetDemuxVersion(void);
WebPDemux()
Mengurai file WebP lengkap yang diberikan oleh data.
WebPDemuxer WebPDemux(const WebPData* data);
Menampilkan objek WebPDemuxer
pada penguraian yang berhasil, NULL jika tidak.
WebPDemuxPartial()
Mengurai file WebP yang mungkin tidak lengkap dan diberikan oleh data. Jika state adalah non-NULL akan diatur untuk menunjukkan status demuxer.
WebPDemuxer WebPDemuxPartial(const WebPData* data, WebPDemuxState* state);
Menampilkan NULL jika terjadi error atau jika data tidak cukup untuk memulai penguraian;
dan objek WebPDemuxer
saat penguraian berhasil.
Perlu diperhatikan bahwa WebPDemuxer
menyimpan pointer internal ke segmen memori data. Jika
data ini tidak stabil, objek demuxer harus dihapus (dengan memanggil
WebPDemuxDelete()
) dan
WebPDemuxPartial()
memanggil data baru lagi. Ini adalah
biayanya biasanya tidak mahal.
WebPDemuxDelete()
Mengosongkan memori yang terkait dengan dmux.
void WebPDemuxDelete(WebPDemuxer* dmux);
Ekstraksi Data/Informasi
typedef enum WebPFormatFeature {
WEBP_FF_FORMAT_FLAGS, // bit-wise combination of WebPFeatureFlags
// corresponding to the 'VP8X' chunk (if present).
WEBP_FF_CANVAS_WIDTH,
WEBP_FF_CANVAS_HEIGHT,
WEBP_FF_LOOP_COUNT, // only relevant for animated file
WEBP_FF_BACKGROUND_COLOR, // idem.
WEBP_FF_FRAME_COUNT // Number of frames present in the demux object.
// In case of a partial demux, this is the number
// of frames seen so far, with the last frame
// possibly being partial.
} WebPFormatFeature;
WebPDemuxGetI()
Dapatkan nilai feature dari dmux.
uint32_t WebPDemuxGetI(const WebPDemuxer* dmux, WebPFormatFeature feature);
Catatan: Nilai hanya valid jika WebPDemux()
digunakan atau
WebPDemuxPartial()
menampilkan status >
WEBP_DEMUX_PARSING_HEADER
.
Iterasi Frame
struct WebPIterator {
int frame_num;
int num_frames; // equivalent to WEBP_FF_FRAME_COUNT.
int fragment_num;
int num_fragments;
int x_offset, y_offset; // offset relative to the canvas.
int width, height; // dimensions of this frame or fragment.
int duration; // display duration in milliseconds.
WebPMuxAnimDispose dispose_method; // dispose method for the frame.
int complete; // true if 'fragment' contains a full frame. partial images
// may still be decoded with the WebP incremental decoder.
WebPData fragment; // The frame or fragment given by 'frame_num' and
// 'fragment_num'.
int has_alpha; // True if the frame or fragment contains transparency.
WebPMuxAnimBlend blend_method; // Blend operation for the frame.
};
WebPDemuxGetFrame()
Mengambil frame frame_number dari dmux.
int WebPDemuxGetFrame(const WebPDemuxer* dmux,
int frame_number,
WebPIterator* iter);
iter->fragment menunjuk ke fragmen pertama saat ditampilkan dari fungsi ini.
Fragmen individual dapat diekstrak menggunakan
WebPDemuxSelectFragment()
Latar (Setting)
frame_number yang sama dengan 0 akan menampilkan frame terakhir gambar.
Menampilkan false jika dmux adalah NULL atau frame dmux tidak ada.
Panggil WebPDemuxReleaseIterator()
saat menggunakan
iterator telah selesai.
Catatan: dmux harus tetap ada selama masa aktif iter.
WebPDemuxNextFrame()
, WebPDemuxPrevFrame()
Menetapkan iter->fragment untuk mengarah ke yang berikutnya (iter->fragment + 1) atau frame sebelumnya (iter->frame_num - 1). Fungsi ini tidak melakukan loop.
int WebPDemuxNextFrame(WebPIterator* iter);
int WebPDemuxPrevFrame(WebPIterator* iter);
Menampilkan true (benar) jika berhasil, false (salah) jika tidak.
WebPDemuxSelectFragment()
Menetapkan iter->fragment untuk mencerminkan nomor fragmen iter->fragment.
int WebPDemuxSelectFragment(WebPIterator* iter, int fragment_num);
Menampilkan true jika fragment_num fragmen ada, false jika tidak.
WebPDemuxReleaseIterator()
Melepaskan memori yang terkait dengan iter.
void WebPDemuxReleaseIterator(WebPIterator* iter);
Harus dipanggil sebelum panggilan berikutnya ke
WebPDemuxGetChunk()
di iter yang sama. Juga, harus
dipanggil sebelum menghancurkan WebPDemuxer
yang terkait dengan
WebPDemuxDelete()
.
Iterasi Potongan
struct WebPChunkIterator {
// The current and total number of chunks with the fourcc given to
// WebPDemuxGetChunk().
int chunk_num;
int num_chunks;
WebPData chunk; // The payload of the chunk.
};
WebPDemuxGetChunk()
Mengambil instance chunk_number dari potongan dengan id fourcc dari dmux.
int WebPDemuxGetChunk(const WebPDemuxer* dmux,
const char fourcc[4], int chunk_number,
WebPChunkIterator* iter);
fourcc adalah array karakter yang berisi 4cc dari potongan yang akan ditampilkan, misalnya, "ICCP", "XMP", "EXIF", dll.
Menyetel chunk_number sama dengan 0 akan menampilkan potongan terakhir dalam sebuah set.
Menampilkan true (benar) jika potongan ditemukan, false jika tidak. Potongan terkait gambar
payload diakses melalui WebPDemuxGetFrame()
dan fungsi terkait. Telepon
WebPDemuxReleaseChunkIterator()
saat digunakan
iterator sudah selesai.
Catatan: dmux harus tetap ada selama iterator aktif.
WebPDemuxNextChunk()
, WebPDemuxPrevChunk()
Menetapkan iter->chunk agar mengarah ke yang berikutnya (iter->chunk_num + 1) atau sebelumnya (iter->chunk_num - 1). Fungsi ini tidak melakukan loop.
int WebPDemuxNextChunk(WebPChunkIterator* iter);
int WebPDemuxPrevChunk(WebPChunkIterator* iter);
Menampilkan true (benar) jika berhasil, false (salah) jika tidak.
WebPDemuxReleaseChunkIterator()
Melepaskan memori yang terkait dengan iter.
void WebPDemuxReleaseChunkIterator(WebPChunkIterator* iter);
Harus dipanggil sebelum menghancurkan WebPDemuxer
yang terkait dengan
WebPDemuxDelete()
.
API WebPAnimDecoder
API ini memungkinkan decoding (mungkin) gambar WebP animasi.
Contoh Kode
WebPAnimDecoderOptions dec_options;
WebPAnimDecoderOptionsInit(&dec_options);
// Tune 'dec_options' as needed.
WebPAnimDecoder* dec = WebPAnimDecoderNew(webp_data, &dec_options);
WebPAnimInfo anim_info;
WebPAnimDecoderGetInfo(dec, &anim_info);
for (uint32_t i = 0; i < anim_info.loop_count; ++i) {
while (WebPAnimDecoderHasMoreFrames(dec)) {
uint8_t* buf;
int timestamp;
WebPAnimDecoderGetNext(dec, &buf, ×tamp);
// ... (Render 'buf' based on 'timestamp').
// ... (Do NOT free 'buf', as it is owned by 'dec').
}
WebPAnimDecoderReset(dec);
}
const WebPDemuxer* demuxer = WebPAnimDecoderGetDemuxer(dec);
// ... (Do something using 'demuxer'; e.g. get EXIF/XMP/ICC data).
WebPAnimDecoderDelete(dec);
typedef struct WebPAnimDecoder WebPAnimDecoder; // Main opaque object.
Opsi Global
struct WebPAnimDecoderOptions {
// Output colorspace. Only the following modes are supported:
// MODE_RGBA, MODE_BGRA, MODE_rgbA and MODE_bgrA.
WEBP_CSP_MODE color_mode;
int use_threads; // If true, use multi-threaded decoding.
};
WebPAnimDecoderOptionsInit()
Harus selalu dipanggil, untuk menginisialisasi WebPAnimDecoderOptions baru sebelum diubah. Menampilkan false jika versi tidak cocok. WebPAnimDecoderOptionsInit() pasti telah berhasil sebelum menggunakan dec_options.
Parameter
dec_options -- opsi (in/out) yang digunakan untuk mendekode animasi
- Hasil
- Benar tentang kesuksesan
int WebPAnimDecoderOptionsInit(
WebPAnimDecoderOptions* dec_options);
WebPAnimDecoderNew()
Membuat dan menginisialisasi objek WebPAnimDecoder.
- Parameter
webp_data -- (di) bitstream WebP. Hal ini seharusnya tidak berubah selama masa aktif objek WebPAnimDecoder output.
dec_options -- (dalam) opsi dekode. Dapat diteruskan NULL untuk dipilih default yang wajar (khususnya, mode warna MODE_RGBA akan dipilih).
- Hasil
Pointer ke objek WebPAnimDecoder yang baru dibuat, atau NULL jika terjadi kesalahan penguraian, opsi tidak valid, atau kesalahan memori.
WebPAnimDecoder* WebPAnimDecoderNew(
const WebPData* webp_data, const WebPAnimDecoderOptions* dec_options);
Informasi global tentang animasi.
struct WebPAnimInfo {
uint32_t canvas_width;
uint32_t canvas_height;
uint32_t loop_count;
uint32_t bgcolor;
uint32_t frame_count;
};
WebPAnimDecoderGetInfo()
Dapatkan informasi global tentang animasi.
- Parameter
dec -- (in) instance decoder untuk mendapatkan informasi.
info -- (keluar) informasi global yang diambil dari animasi.
- Hasil
Benar tentang kesuksesan.
int WebPAnimDecoderGetInfo(const WebPAnimDecoder* dec,
WebPAnimInfo* info);
WebPAnimDecoderGetNext()
Ambil frame berikutnya dari dec berdasarkan opsi yang diberikan ke
WebPAnimDecoderNew()
Ini akan menjadi
kanvas yang direkonstruksi berukuran canvas_width * 4 * canvas_height
,
sub-persegi panjang {i>frame<i}. Buffer yang ditampilkan buf hanya valid hingga
panggilan berikutnya ke WebPAnimDecoderGetNext()
,
WebPAnimDecoderReset()
atau
WebPAnimDecoderDelete()
.
- Parameter
dec -- (in/out) instance decoder tempat frame berikutnya akan diproses diambil.
buf -- (out) frame yang didekode.
timestamp -- (keluar) stempel waktu frame dalam milidetik.
- Hasil
False jika ada argumen yang NULL, atau jika terdapat penguraian atau error decoding, atau jika tidak ada frame lagi. Jika tidak, menampilkan nilai benar.
int WebPAnimDecoderGetNext(WebPAnimDecoder* dec,
uint8_t** buf, int* timestamp);
WebPAnimDecoderHasMoreFrames()
Periksa apakah ada lebih banyak frame yang tersisa untuk didekode.
- Parameter
- dec -- (dalam) instance decoder yang akan diperiksa.
- Hasil
- Benar jika dec bukan NULL dan beberapa frame belum didekode. Jika tidak, menampilkan nilai SALAH.
int WebPAnimDecoderHasMoreFrames(const WebPAnimDecoder* dec);
WebPAnimDecoderReset()
Mereset objek WebPAnimDecoder, sehingga panggilan berikutnya ke
WebPAnimDecoderGetNext()
akan memulai ulang dekode
dari frame pertama. Hal ini akan membantu jika semua frame perlu didekode
beberapa kali (mis. info.loop_count kali) tanpa menghancurkan dan membuat ulang
objek dec.
- Parameter
- dec -- instance decoder (in/out) yang akan direset
void WebPAnimDecoderReset(WebPAnimDecoder* dec);
WebPAnimDecoderGetDemuxer()
Ambil objek demuxer internal.
Mendapatkan objek demuxer dapat berguna jika hanya ingin menggunakan operasi
tersedia melalui demuxer; mis. untuk mendapatkan metadata XMP/EXIF/ICC. URL yang dikembalikan
objek demuxer dimiliki oleh dec dan hanya valid hingga panggilan berikutnya ke
WebPAnimDecoderDelete()
- Parameter
- dec -- (in) instance decoder tempat objek demuxer akan diambil.
const WebPDemuxer* WebPAnimDecoderGetDemuxer(const WebPAnimDecoder* dec);
WebPAnimDecoderDelete()
Menghapus objek WebPAnimDecoder.
- Parameter
- dec -- (in/out) instance decoder yang akan dihapus.
- Hasil
- Benar tentang kesuksesan.
void WebPAnimDecoderDelete(WebPAnimDecoder* dec);
Jenis Data Umum
Enum
typedef enum WebPFeatureFlags {
FRAGMENTS_FLAG = 0x00000001,
ANIMATION_FLAG = 0x00000002,
XMP_FLAG = 0x00000004,
EXIF_FLAG = 0x00000008,
ALPHA_FLAG = 0x00000010,
ICCP_FLAG = 0x00000020
} WebPFeatureFlags;
// Dispose method (animation only). Indicates how the area used by the current
// frame is to be treated before rendering the next frame on the canvas.
typedef enum WebPMuxAnimDispose {
WEBP_MUX_DISPOSE_NONE, // Do not dispose.
WEBP_MUX_DISPOSE_BACKGROUND // Dispose to background color.
} WebPMuxAnimDispose;
// Blend operation (animation only). Indicates how transparent pixels of the
// current frame are blended with those of the previous canvas.
typedef enum WebPMuxAnimBlend {
WEBP_MUX_BLEND, // Blend.
WEBP_MUX_NO_BLEND // Do not blend.
} WebPMuxAnimBlend;
WebPDataInit()
Melakukan inisialisasi konten objek webp_data dengan nilai default.
void WebPDataInit(WebPData* webp_data);
WebPDataClear()
Menghapus konten objek webp_data dengan memanggil free()
. Tidak
membatalkan alokasi objek itu sendiri.
void WebPDataClear(WebPData* webp_data);
WebPDataCopy()
Mengalokasikan penyimpanan yang diperlukan untuk dst dan menyalin konten src. Menampilkan nilai true saat berhasil.
int WebPDataCopy(const WebPData* src, WebPData* dst);