WebP Container API Belgeleri

WebP görüntüleri için RIFF container manipülasyonu.

Mux API'sı

Renk gibi özellikler içeren WebP container görüntülerinin değiştirilmesine izin verir profil, meta veri, animasyon ve parçalanmış resimler.

Kod Örnekleri

Resim Verileri, Renk Profili ve XMP Meta Verileriyle MUX oluşturma

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

Bir WebP Dosyasından Resim ve Renk Profili Verilerini Al

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

Mux Nesnesinin Yaşamı

Sıralamalar

// 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()

Mux kitaplığının sürüm numarasını, Ana/alt/düzeltme işlemlerinin her biri için 8 bit. Ör. 2.5.7 sürümü 0x020507.

int WebPGetMuxVersion(void);

WebPMuxNew()

Boş bir mux nesnesi oluşturur.

WebPMux* WebPMuxNew(void);
İadeler
Yeni oluşturulan boş mux nesnesinin işaretçisi.

WebPMuxDelete()

Mux nesnesini siler.

void WebPMuxDelete(WebPMux* mux);
Parametreler
mux -- (giriş/çıkış) nesne silinecek

Mux Oluşturma

WebPMuxCreate()

WebP RIFF biçiminde verilen ham verilerden bir mux nesnesi oluşturur.

WebPMux* WebPMuxCreate(const WebPData* bitstream, int copy_data);
Parametreler

bit akışı -- (WebP RIFF biçimindeki bit akışı verileri içinde)

copy_data -- (in) değeri 1, belirtilen verilerin mux'e kopyalanacağını belirtir ve 0 değeri, verilerin mux nesnesine KAYDEDİLMEYECEĞİNİ gösterir.

İadeler

Belirtilen verilerden oluşturulan mux nesnesine (başarıyla ilgili) bir işaretçi.

NULL -- Geçersiz veri veya bellek hatası durumunda.

Resim Olmayan Yığınlar

WebPMuxSetChunk()

Mux nesnesine fourcc kimliğine ve chunk_data verisine sahip bir yığın ekler. Herhangi biri aynı kimliğe sahip mevcut parçalar kaldırılacak.

WebPMuxError WebPMuxSetChunk(WebPMux* mux,
                             const char fourcc[4],
                             const WebPData* chunk_data,
                             int copy_data);

Not: Parça API'leri üzerinden yalnızca resimle ilgili olmayan parçalar yönetilmelidir. (Resimle ilgili parçalar şunlardır: "ANMF", "FRGM", "VP8 ", "VP8L" ve "ALPH"). Eklemek için, resimleri almak ve silmek, WebPMuxSetImage() kullanmak, WebPMuxPushFrame(), WebPMuxGetFrame() ve WebPMuxDeleteFrame()

Parametreler

mux -- Parçanın ekleneceği (giriş/çıkış) nesnesi

fourcc -- (in) kısmında, verilen chunk; ör. "ICCP", "XMP ", "EXIF" vb.

chunk_data - (in) eklenecek parça verisi

copy_data -- (in) değeri 1, belirtilen verilerin mux'e kopyalanacağını belirtir ve 0 değeri, verilerin mux nesnesine KAYDEDİLMEYECEĞİNİ gösterir.

İadeler

WEBP_MUX_INVALID_ARGUMENT -- mux, Fourcc veya chunk_data, NULL ise ya da Fourcc, bir resim parçasına karşılık gelir.

WEBP_MUX_MEMORY_ERROR -- Bellek ayırma hatasında.

WEBP_MUX_OK -- başarı.

WebPMuxGetChunk()

Mux nesnesinde fourcc kimliğine sahip parçanın verilerine bir başvuru alır. Arayan kişi, döndürülen verileri serbest BULMAMALIDIR.

WebPMuxError WebPMuxGetChunk(const WebPMux* mux,
                             const char fourcc[4],
                             WebPData* chunk_data);
Parametreler

mux - Parça verilerinin getirileceği (in) nesne

fourcc -- (in) Parçanın dörtcc'sini içeren bir karakter dizisi; ör. "ICCP", "XMP ", "EXIF" vb.

chunk_data -- (çıkış) parça verisi döndürdü

İadeler

WEBP_MUX_INVALID_ARGUMENT -- mux, Fourcc veya chunk_data, NULL ise ya da Fourcc, bir resim parçasına karşılık gelir.

WEBP_MUX_NOT_FOUND -- Mux, belirtilen id [no]

WEBP_MUX_OK -- başarı.

WebPMuxDeleteChunk()

Verilen dört koda sahip parçayı mux nesnesinden siler.

WebPMuxError WebPMuxDeleteChunk(WebPMux* mux, const char fourcc[4]);
Parametreler

mux - Parçanın silineceği (giriş/çıkış) nesnesi

fourcc -- (in) Parçanın dörtcc'sini içeren bir karakter dizisi; ör. "ICCP", "XMP ", "EXIF" vb.

İadeler

WEBP_MUX_INVALID_ARGUMENT -- mux veya Fourcc, NULL ise ya da Fourcc ise bir resim parçasına karşılık gelir.

WEBP_MUX_NOT_FOUND -- Mux, belirtilen dört cc

WEBP_MUX_OK -- başarı.

Resimler

Tek bir kare/parçayla ilgili verileri içerir.

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

Mux nesnesindeki (animasyonsuz ve parçalanmamış) resmi ayarlar. Not: Mevcut tüm resimler (kareler/parçalar dahil) kaldırılır.

WebPMuxError WebPMuxSetImage(WebPMux* mux,
                             const WebPData* bitstream,
                             int copy_data);
Parametreler

mux -- Resmin ayarlanacağı (giriş/çıkış) nesne

bit akışı -- (in) ham VP8/VP8L bit akışı veya tek görüntülü bir WebP olabilir dosya (animasyonsuz ve parçalanmamış)

copy_data -- (in) değeri 1, belirtilen verilerin mux'e kopyalanacağını belirtir ve 0 değeri, verilerin mux nesnesine KAYDEDİLMEYECEĞİNİ gösterir.

İadeler

WEBP_MUX_INVALID_ARGUMENT -- Mux NULL ise veya bit akışı NULL ise.

WEBP_MUX_MEMORY_ERROR -- Bellek ayırma hatasında.

WEBP_MUX_OK -- başarı.

WebPMuxPushFrame()

Mux nesnesinin sonuna bir çerçeve ekler.

WebPMuxError WebPMuxPushFrame(WebPMux* mux,
                              const WebPMuxFrameInfo* frame,
                              int copy_data);

Notlar:

  1. çerçeve.id, WEBP_CHUNK_ANMF veya WEBP_CHUNK_FRGM değerlerinden biri olmalıdır
  2. Animasyonsuz parçalanmamış bir resmi ayarlamak için şunu kullanın: Bunun yerine WebPMuxSetImage().
  3. Aktarılan çerçevenin türü, mux'teki karelerle aynı olmalıdır.
  4. WebP yalnızca çift ofsetleri desteklediğinden tüm tek ofsetler tutturulur şunun kullanılarak eşit bir konuma getirilecek: ofset &= ~1
Parametreler

mux - Çerçevenin ekleneceği (giriş/çıkış) nesnesi

frame -- (çerçeve içi) verileri.

copy_data -- (in) değeri 1, belirtilen verilerin mux'e kopyalanacağını belirtir ve 0 değeri, verilerin mux nesnesine KAYDEDİLMEYECEĞİNİ gösterir.

İadeler

WEBP_MUX_INVALID_ARGUMENT -- Mux veya çerçeve NULL ise ya da içerik frame geçersiz.

WEBP_MUX_MEMORY_ERROR -- Bellek ayırma hatasında.

WEBP_MUX_OK -- başarı.

WEBP_MUX_MEMORY_ERROR -- Bellek ayırma hatasında.

WebPMuxGetFrame()

Mux nesnesinden n'inci kareyi alır. frame->bitstream içeriği Malloc() kullanılarak ayrılır ve mux nesnesine ait DEĞİLDİR. ŞEKİLDE OLMALIDIR WebPDataClear() numaralı telefonu arayarak arayanın anlaşmaya vardığından emin olun. nth=0 yani son konum anlamına gelir.

WebPMuxError WebPMuxGetFrame(const WebPMux* mux,
                             uint32_t nth,
                             WebPMuxFrameInfo* frame);
Parametreler

mux - Bilgilerin alınacağı (in) nesne

mux nesnesindeki çerçevenin nth -- (in) dizini

frame -- (out) döndürülen çerçeve verileri

İadeler

WEBP_MUX_INVALID_ARGUMENT -- if mux or frame is NULL.

WEBP_MUX_NOT_FOUND - Muxta n'inci kareden azsa nesnesini tanımlayın.

WEBP_MUX_BAD_DATA -- Mux'taki n. çerçeve parçası geçersizse.

WEBP_MUX_OK -- başarı.

WebPMuxDeleteFrame()

Mux nesnesinden bir çerçeveyi siler. nth=0 değerinin özel bir anlamı vardır - last dokunun.

WebPMuxError WebPMuxDeleteFrame(WebPMux* mux, uint32_t nth);
Parametreler

mux - Bir çerçevenin silineceği (giriş/çıkış) nesnesi

nth - (inç) Çerçevenin silineceği konum

İadeler

WEBP_MUX_INVALID_ARGUMENT -- if mux is NULL.

WEBP_MUX_NOT_FOUND: Mux'te n'den az kare varsa dokunun.

WEBP_MUX_OK -- başarı.

Animasyon

Animasyon Parametreleri

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

Mux nesnesindeki animasyon parametrelerini ayarlar. Mevcut ANIM parçaları kaldırılır.

WebPMuxError WebPMuxSetAnimationParams(WebPMux* mux,
                                       const WebPMuxAnimParams* params);
Parametreler

mux -- ANIM yığınının ayarlanacağı/ekleneceği (giriş/çıkış) nesnesi

params -- (in) animasyon parametreleri.

İadeler

WEBP_MUX_INVALID_ARGUMENT -- mux veya parametreler NULL ise.

WEBP_MUX_MEMORY_ERROR -- Bellek ayırma hatasında.

WEBP_MUX_OK -- başarı.

WebPMuxGetAnimationParams()

Animasyon parametrelerini mux nesnesinden alır.

WebPMuxError WebPMuxGetAnimationParams(const WebPMux* mux,
                                       WebPMuxAnimParams* params);
Parametreler

mux - Animasyon parametrelerinin getirileceği (in) nesne

ANIM yığınından çıkarılan params -- (out) animasyon parametreleri

İadeler

WEBP_MUX_INVALID_ARGUMENT -- mux veya parametreler NULL ise.

WEBP_MUX_NOT_FOUND -- Mux nesnesinde ANIM yığını yoksa.

WEBP_MUX_OK -- başarı.

Çeşitli (Elektrik, su, ısınma gibi) Yardımcı hizmetler

WebPMuxGetCanvasSize()

Tuval boyutunu mux nesnesinden alır.

WebPMuxError WebPMuxGetCanvasSize(const WebPMux* mux,
                                  int* width,
                                  int* height);

Not: Bu yöntemde, VP8X parçasının (varsa) güncel olduğu varsayılır. Yani, mux nesnesi, WebPMuxAssemble() veya WebPMuxCreate().

Parametreler

mux - Kanvas boyutunun getirileceği (in) nesne

width - (dış) tuval genişliği

height - (dış) tuval yüksekliği

İadeler

WEBP_MUX_INVALID_ARGUMENT -- if mux, width or height is NULL.

WEBP_MUX_BAD_DATA -- VP8X/VP8/VP8L parça veya kanvas boyutu geçersizse.

WEBP_MUX_OK -- başarı.

WebPMuxGetFeatures()

Özellik bayraklarını mux nesnesinden alır.

WebPMuxError WebPMuxGetFeatures(const WebPMux* mux, uint32_t* flags);

Not: Bu yöntemde, VP8X parçasının (varsa) güncel olduğu varsayılır. Yani, mux nesnesi, WebPMuxAssemble() veya WebPMuxCreate().

Parametreler

mux - Özelliklerin alınacağı (in) nesne

flags -- (giden) , mux'te hangi özelliklerin mevcut olduğunu belirten işaretler. nesnesini tanımlayın. Bu, çeşitli işaret değerleri için VEYA olacaktır. Sıralama WebPFeatureFlags tek tek işaret değerlerini test etmek için kullanılabilir.

İadeler

WEBP_MUX_INVALID_ARGUMENT -- if mux or flags is NULL.

WEBP_MUX_BAD_DATA -- VP8X/VP8/VP8L parça veya kanvas boyutu geçersizse.

WEBP_MUX_OK -- başarı.

WebPMuxNumChunks()

mux nesnesinde belirtilen etiket değerine sahip olan parçaların sayısını alır.

WebPMuxError WebPMuxNumChunks(const WebPMux* mux,
                              WebPChunkId id,
                              int* num_elements);
Parametreler

mux - Bilgilerin alınacağı (in) nesne

id -- (in) parça kimliği, parçanın türünü belirtir

num_elements - Belirtilen parça kimliğine sahip parça sayısı (çıkış)

İadeler

WEBP_MUX_INVALID_ARGUMENT -- if mux, or num_elements is NULL.

WEBP_MUX_OK -- başarı.

WebPMuxAssemble()

Tüm parçaları WebP RIFF biçiminde derler ve assembled_data'da döndürür. Bu işlev, mux nesnesini de doğrular.

WebPMuxError WebPMuxAssemble(WebPMux* mux, WebPData* assembled_data);

Not: assembled_data içeriği yok sayılır ve bunların üzerine yazılır. Ayrıca, assembled_data içeriği Malloc() kullanılarak ayrılır, ancak DEĞİL mux nesnesine aittir. Arayan kişi tarafından WebPDataClear().

Parametreler

mux -- Parçaları birleştirilecek (giriş/çıkış) nesne

assembled_data - (dışarıda) birleştirilmiş WebP verileri

İadeler

WEBP_MUX_BAD_DATA -- Mux nesnesi geçersizse.

WEBP_MUX_INVALID_ARGUMENT -- if mux or assembled_data is NULL.

WEBP_MUX_MEMORY_ERROR -- Bellek ayırma hatasında.

WEBP_MUX_OK -- başarı.

WebPAnimEncoder API'sı

Bu API, animasyonlu WebP resimlerinin kodlanmasına (muhtemelen) izin verir.

Kod Örneği

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.

Global Seçenekler

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

Yeni bir WebPAnimEncoderOptions başlatmak için her zaman çağrılmalıdır yapın. Sürüm uyuşmazlığı durumunda false (yanlış) değerini döndürür. WebPAnimEncoderOptionsInit(), enc_options nesnesini ifade eder.

Parametreler
enc_options -- Animasyon kodlama için kullanılan (giriş/çıkış) seçenekleri
İadeler
Gerçekten başarı.
int WebPAnimEncoderOptionsInit(
    WebPAnimEncoderOptions* enc_options);

WebPAnimEncoderNew()

Bir WebPAnimEncoder nesnesi oluşturur ve başlatır.

Parametreler

width/height: Tuval genişliği ve animasyonun yüksekliği (inç).

enc_options -- (in) kodlama seçenekleri; seçmek için NULL değer iletilebilir makul varsayılanlar.

İadeler

Yeni oluşturulan WebPAnimEncoder nesnesine işaretçi veya örnekte NULL bir sorun vardır.

WebPAnimEncoder* WebPAnimEncoderNew(
    int width, int height, const WebPAnimEncoderOptions* enc_options);

WebPAnimEncoderAdd()

Belirtilen çerçeveyi WebP için optimize edin, kodlayın ve WebPAnimEncoder nesnesini ifade eder.

WebPAnimEncoderAdd için son çağrı, frame = NULL ile olmalıdır. başka kare eklenmeyeceğini belirtir. Bu çağrı ayrıca şu amaçlarla da kullanılır: son karenin süresini belirler.

Parametreler

enc -- Çerçevenin ekleneceği (in/out) nesnesi.

frame -- ARGB veya YUV(A) biçiminde çerçeve verileri. Bu YUV(A) biçiminde, küçük bir kayba yol açan ARGB'ye dönüştürülür.

timestamp_ms -- Bu çerçevenin milisaniye cinsinden zaman damgası. Süre şu şekilde hesaplanır: "sonraki karenin zaman damgası - seçin." Bu nedenle, zaman damgaları azalan düzende olmalıdır.

config -- (in) kodlama seçenekleri; makul seçim yapmak için NULL iletilebilir varsayılan olarak ayarlanır.

İadeler

Hata durumunda, yanlış değerini döndürür ve frame->error_code uygun şekilde ayarlanır. Aksi takdirde true değerini döndürür.

int WebPAnimEncoderAdd(
    WebPAnimEncoder* enc, struct WebPPicture* frame, int timestamp_ms,
    const struct WebPConfig* config);

WebPAnimEncoderAssemble()

Şimdiye kadar eklenen tüm kareleri bir WebP bit akışında birleştirin. Bu görüşme, öncesinde frame = NULL ile WebPAnimEncoderAdd çağrısı gelir; eğer değilse son karenin süresi dahili olarak tahmin edilir.

Parametreler

enc -- Çerçevelerin oluşturulacağı (in/out) nesne.

webp_data -- (giden) oluşturulan WebP bit akışıdır.

İadeler

Başarıya inanma.

int WebPAnimEncoderAssemble(WebPAnimEncoder* enc, WebPData* webp_data);

WebPAnimEncoderGetError()

enc kullanarak en son çağrıya karşılık gelen hata dizesini alın. İlgili içeriği oluşturmak için kullanılan döndürülen dize enc öğesine aittir ve yalnızca WebPAnimEncoderAdd() veya WebPAnimEncoderAssemble() veya WebPAnimEncoderDelete().

Parametreler
enc - Hata dizesinin getirileceği (in/out) nesne.
İadeler
NULL if enc is NULL. Aksi takdirde, son enc çağrısında hata veya son çağrı başarılar.
const char* WebPAnimEncoderGetError(WebPAnimEncoder* enc);

WebPAnimEncoderDelete()

WebPAnimEncoder nesnesini siler.

Parametreler
enc -- (inc/out) silinecek nesne
void WebPAnimEncoderDelete(WebPAnimEncoder* enc);

Demux API'sı

WebP dosyalarından resim ve genişletilmiş biçim verilerinin alınmasını sağlar.

Kod Örnekleri

Tüm Çerçeveleri, ICC Profilini ve EXIF/XMP Meta Verilerini Çıkarmak İçin WebP Verilerinin Muafiyetini Kaldırma

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

Demux Nesnesinin Ömrü

Sıralamalar

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

Demux kitaplığının sürüm numarasını döndürür ve Ana/alt/düzeltme işlemlerinin her biri için 8 bit. Ör.2.5.7 sürümü 0x020507.

int WebPGetDemuxVersion(void);

WebPDemux()

data tarafından sağlanan tam WebP dosyasını ayrıştırır.

WebPDemuxer WebPDemux(const WebPData* data);

Başarılı ayrıştırmada WebPDemuxer nesnesini, aksi takdirde NULL döndürür.

WebPDemuxPartial()

data tarafından sağlanan, muhtemelen tamamlanmamış WebP dosyasını ayrıştırır. Eyalet şöyleyse NULL olmayan bir değer, demuxer'ın durumunu gösterecek şekilde ayarlanır.

WebPDemuxer WebPDemuxPartial(const WebPData* data, WebPDemuxState* state);

Hata olması durumunda veya ayrıştırmaya başlamak için yeterli veri yoksa NULL değerini döndürür; ve başarılı ayrıştırmada bir WebPDemuxer nesnesi gösterilir.

WebPDemuxer işlevinin, veri bellek segmentinin dahili işaretçilerini sakladığını unutmayın. Eğer bu veriler değişkendir, demuxer nesnesinin silinmesi gerekir ( WebPDemuxDelete()) ve WebPDemuxPartial() yeni verileri kullanarak tekrar aradı. Bu Bu genellikle ucuz bir işlemdir.

WebPDemuxDelete()

dmux ile ilişkili bellekte yer açar.

void WebPDemuxDelete(WebPDemuxer* dmux);

Veri/Bilgi Ayıklama

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

dmux öğesinden feature değerini alın.

uint32_t WebPDemuxGetI(const WebPDemuxer* dmux, WebPFormatFeature feature);

Not: Değerler yalnızca WebPDemux() kullanılmışsa veya WebPDemuxPartial() bir durum döndürdü > WEBP_DEMUX_PARSING_HEADER

Çerçeve Yineleme

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

dmux öğesinden frame_number karesini alır.

int WebPDemuxGetFrame(const WebPDemuxer* dmux,
                      int frame_number,
                      WebPIterator* iter);

iter-&gt;fragment, bu işlevden döndürülen ilk parçaya işaret eder. Parçalar, tek tek parçacıklar WebPDemuxSelectFragment(). Ayar frame_number, resmin son karesini döndürür.

dmux NULL ise veya dmux karesi yoksa yanlış değerini döndürür. WebPDemuxReleaseIterator() yinelemenin tamamlanmış olması gerekir.

Not: dmux, iter öğesinin ömrü boyunca kalmalıdır.

WebPDemuxNextFrame(), WebPDemuxPrevFrame()

iter-&gt;fragment'i sonrakiyi işaret edecek şekilde ayarlar (iter-&gt;fragment + 1) veya önceki (iter-&gt;frame_num - 1) kareye karşılık gelir. Bu işlevler döngü oluşturmaz.

int WebPDemuxNextFrame(WebPIterator* iter);
int WebPDemuxPrevFrame(WebPIterator* iter);

Başarıda doğru, aksi takdirde yanlış değerini döndürür.

WebPDemuxSelectFragment()

iter-&gt;fragment'yı, iter-&gt;fragment parça sayısını yansıtacak şekilde ayarlar.

int WebPDemuxSelectFragment(WebPIterator* iter, int fragment_num);

fragment_num parçası mevcutsa doğru, aksi takdirde yanlış değerini döndürür.

WebPDemuxReleaseIterator()

iter ile ilişkili tüm belleği serbest bırakır.

void WebPDemuxReleaseIterator(WebPIterator* iter);

Aynı yinelemede WebPDemuxGetChunk(). Ayrıca, çağrılır, ilişkilendirilmiş WebPDemuxer kaldırılmadan önce çağrılır: WebPDemuxDelete()

Yığın Yinelemesi

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

Şu kaynaktan fourcc kimliğine sahip parçanın chunk_number örneğini alır dmux ile değiştirin.

int WebPDemuxGetChunk(const WebPDemuxer* dmux,
                      const char fourcc[4], int chunk_number,
                      WebPChunkIterator* iter);

fourcc, döndürülecek parçanın dörtlü cc'sini içeren bir karakter dizisidir. ör. "ICCP", "XMP ", "EXIF" vb.

chunk_number'ın 0'a ayarlanması, kümedeki son parçayı döndürür.

Parça bulunursa true (doğru), aksi takdirde false (yanlış) değerini döndürür. Resimle ilgili yığın yüklere WebPDemuxGetFrame() üzerinden erişilir ve ilgili işlevler. Telefonla arama Kullanıldığında WebPDemuxReleaseChunkIterator() tamamlandığına inanıyorum.

Not: dmux, yinelemenin ömrü boyunca kalmalıdır.

WebPDemuxNextChunk(), WebPDemuxPrevChunk()

iter->chunk'ı sonrakie (iter->chunk_num + 1) işaret edecek şekilde ayarlar veya önceki (iter->chunk_num - 1) yığın. Bu işlevler döngü oluşturmaz.

int WebPDemuxNextChunk(WebPChunkIterator* iter);
int WebPDemuxPrevChunk(WebPChunkIterator* iter);

Başarıda doğru, aksi takdirde yanlış değerini döndürür.

WebPDemuxReleaseChunkIterator()

iter ile ilişkili tüm belleği serbest bırakır.

void WebPDemuxReleaseChunkIterator(WebPChunkIterator* iter);

Şununla ilişkili WebPDemuxer kaldırılmadan önce çağrılmalıdır: WebPDemuxDelete()

WebPAnimDecoder API'sı

Bu API, animasyonlu WebP resimlerinin kodunun çözülmesine (muhtemelen) izin verir.

Kod Örneği

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, &timestamp);
    // ... (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.

Global Seçenekler

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

Yeni bir WebPAnimDecoderOptions başlatmak için her zaman çağrılmalıdır yapın. Sürüm uyuşmazlığı durumunda false (yanlış) değerini döndürür. WebPAnimDecoderOptionsInit(), dec_options nesnesini ifade eder.

Parametreler

dec_options -- Animasyon kodunu çözmek için kullanılan (giriş/çıkış) seçenekleri

İadeler
Gerçekten başarı
int WebPAnimDecoderOptionsInit(
    WebPAnimDecoderOptions* dec_options);

WebPAnimDecoderNew()

WebPAnimDecoder nesnesi oluşturur ve başlatır.

Parametreler

webp_data -- (içinde) WebP bit akışı. Bu değer, WebPAnimDecoder nesnesinin kullanım ömrü.

dec_options -- (kod çözme seçenekleri). Seçmek için NULL değer iletilebilir makul varsayılan değerler (özellikle, MODE_RGBA renk modu seçilir).

İadeler

Yeni oluşturulan WebPAnimDecoder nesnesine işaretçi veya durumunda NULL geçersiz seçenek veya bellek hatası gibi sorunları giderebilir.

WebPAnimDecoder* WebPAnimDecoderNew(
    const WebPData* webp_data, const WebPAnimDecoderOptions* dec_options);

Animasyonla ilgili genel bilgiler.

struct WebPAnimInfo {
  uint32_t canvas_width;
  uint32_t canvas_height;
  uint32_t loop_count;
  uint32_t bgcolor;
  uint32_t frame_count;
};

WebPAnimDecoderGetInfo()

Animasyon hakkında genel bilgiler alın.

Parametreler

dec -- (in) kod çözücü örneğinde bilgi alınacak.

info - Animasyondan getirilen genel bilgilerdir.

İadeler

Başarıya inanma.

int WebPAnimDecoderGetInfo(const WebPAnimDecoder* dec,
                           WebPAnimInfo* info);

WebPAnimDecoderGetNext()

Şunlara sağlanan seçeneklere göre dec işlevinden sonraki kareyi getir WebPAnimDecoderNew(). Bu program tamamen yeniden inşa edilmiş canvas_width * 4 * canvas_height boyutunda bir tuval çerçeve alt dikdörtgen. Döndürülen arabellek buf yalnızca WebPAnimDecoderGetNext() adlı kişiye bir sonraki arama, WebPAnimDecoderReset() veya WebPAnimDecoderDelete().

Parametreler

dec -- Sonraki karenin olacağı (in/out) kod çözücü örneği getiriliyor.

buf -- (out) kodu çözülmüş çerçeve.

timestamp -- (çıkış) zaman damgası (milisaniye cinsinden).

İadeler

Bağımsız değişkenlerden herhangi biri NULL ise veya ayrıştırma ya da olduğunu veya hiç kare olmadığını gösterir. Aksi takdirde true değerini döndürür.

int WebPAnimDecoderGetNext(WebPAnimDecoder* dec,
                           uint8_t** buf, int* timestamp);

WebPAnimDecoderHasMoreFrames()

Kodun çözülmesi gereken daha fazla kare kalıp kalmadığını kontrol edin.

Parametreler
dec -- (in) kod çözücü örneği kontrol edilecek.
İadeler
dec NULL değilse ve bazı karelerin kodu henüz çözülmediyse doğru değerini döndürür. Diğer durumlarda false döndürür.
int WebPAnimDecoderHasMoreFrames(const WebPAnimDecoder* dec);

WebPAnimDecoderReset()

WebPAnimDecoder nesnesini sıfırlar. Böylece, WebPAnimDecoderGetNext(), kod çözme işlemini yeniden başlatacak kareyi oynatın. Bu, tüm karelerin kodunun çözülmesi gerektiğinde yardımcı olur birden fazla kez (ör. info.loop_count times) bozmadan ve yeniden oluşturmadan dec nesnesini ifade eder.

Parametreler
dec -- (giriş/çıkış) kod çözücü örneği sıfırlanacak
void WebPAnimDecoderReset(WebPAnimDecoder* dec);

WebPAnimDecoderGetDemuxer()

Dahili demuxer nesnesini alın.

Yalnızca işlemleri kullanmak isteyen demuxer nesnesini edinmek faydalı olabilir demuxer üzerinden erişilebilir; ör. kullanarak XMP/EXIF/ICC meta verilerini almalısınız. Döndürülen demuxer nesnesi dec öğesine aittir ve yalnızca WebPAnimDecoderDelete().

Parametreler
dec -- (in) demuxer nesnesinin olacağı kod çözücü örneği getiriliyor.
const WebPDemuxer* WebPAnimDecoderGetDemuxer(const WebPAnimDecoder* dec);

WebPAnimDecoderDelete()

WebPAnimDecoder nesnesini siler.

Parametreler
dec - Silinecek (giriş/çıkış) kod çözücü örneği.
İadeler
Gerçekten başarı.
void WebPAnimDecoderDelete(WebPAnimDecoder* dec);

Yaygın Veri Türleri

Sıralamalar

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

webp_data nesnesinin içeriğini varsayılan değerlerle başlatır.

void WebPDataInit(WebPData* webp_data);

WebPDataClear()

free() öğesini çağırarak webp_data nesnesinin içeriğini temizler. Şunu yapmaz: anlaşmaya varmamız gerekir.

void WebPDataClear(WebPData* webp_data);

WebPDataCopy()

dst için gerekli depolama alanını ayırır ve src içeriğini kopyalar. Başarıda "doğru" değerini döndürür.

int WebPDataCopy(const WebPData* src, WebPData* dst);