WebP Container API Belgeleri

WebP görüntüleri için RIFF container işleme.

Mux API'sı

Renk profili, meta veri, animasyon ve parçalanmış resimler gibi özellikler içeren WebP kapsayıcı görüntülerinin manipülasyonuna olanak tanır.

Kod Örnekleri

Resim Verileri, Renk Profili ve XMP Meta Verileri ile bir 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 Verileri Alma

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 Nesnelerin Ömrü

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

Ana/alt/düzeltmelerin her biri için 8 bit kullanılarak on altılı olarak paketlenmiş mux kitaplığının sürüm numarasını döndürür. Ör. 2.5.7 sürümü: 0x020507.

int WebPGetMuxVersion(void);

WebPMuxNew()

Boş bir mux nesnesi oluşturur.

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

WebPMuxDelete()

Mux nesnesini siler.

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

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

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

copy_data -- (in) değer 1, verilen verilerin mux'a kopyalanacağını, 0 değeri ise verilerin mux nesnesine kopyalanmayacağını gösterir.

İlerlemeler

Verilen verilerden oluşturulan çok amaçlı nesneye yönelik bir işaretçi - başarı durumunda.

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

Resim Olmayan Parçalar

WebPMuxSetChunk()

fourcc kimliğine ve mux nesnesine chunk_data verilerine sahip bir yığın ekler. Aynı kimliğe sahip mevcut parçalar kaldırılır.

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

Not: Yalnızca görüntüyle ilgili olmayan parçalar, chunk API'leri aracılığıyla yönetilmelidir. (Görüntüyle ilgili bölümler: "ANMF", "FRGM", "VP8 ", "VP8L" ve "ALPH"). Resim eklemek, almak ve silmek için WebPMuxSetImage(), WebPMuxPushFrame(), WebPMuxGetFrame() ve WebPMuxDeleteFrame() kullanın.

Parametreler

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

fourcc -- (in) belirli bir yığının Fourcc'yi içeren bir karakter dizisi; ör. "ICCP", "XMP ", "EXIF" vb.

chunk_data -- (içinde) eklenecek yığın veri

copy_data -- (in) değer 1, verilen verilerin mux'a kopyalanacağını, 0 değeri ise verilerin mux nesnesine kopyalanmayacağını gösterir.

İlerlemeler

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

WEBP_MUX_MEMORY_ERROR -- Bellek ayırma hatası.

WEBP_MUX_OK -- başarıya ulaştı.

WebPMuxGetChunk()

Mux nesnesinde fourcc kimliğine sahip yığın verilerine bir referans alır. Arayan kişi döndürülen verileri BOŞALTMAMALIDIR.

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

mux -- Yığın verilerinin getirileceği (in) nesne

fourcc -- (in) yığının dört cc değerini içeren bir karakter dizisi; ör. "ICCP", "XMP ", "EXIF" vb.

chunk_data -- (çıkış) yığın verisi döndürdü

İlerlemeler

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

WEBP_MUX_NOT_FOUND -- Mux, belirtilen kimliğe sahip bir yığın içermiyorsa.

WEBP_MUX_OK -- başarıya ulaştı.

WebPMuxDeleteChunk()

Verilen fourcc değerine sahip yığını mux nesnesinden siler.

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

mux -- Yığının silineceği (giriş/çıkış) nesne

fourcc -- (in) yığının dört cc değerini içeren bir karakter dizisi; ör. "ICCP", "XMP ", "EXIF" vb.

İlerlemeler

WEBP_MUX_INVALID_ARGUMENT: Mux veya Fourcc NULL değeriyse veya Fourcc'nin bir resim parçasına karşılık gelmesi.

WEBP_MUX_NOT_FOUND -- Mux, belirtilen dörtlü ile bir yığın içermiyorsa.

WEBP_MUX_OK -- başarıya ulaştı.

Resimler

Tek bir çerçeve/parçayla ilgili verileri kapsar.

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 resimler (çerçeveler/parçalar dahil) kaldırılacaktır.

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

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

bitstream -- (içinde) ham bir VP8/VP8L bit akışı veya tek resimli WebP dosyası (animasyonsuz ve parçalanmamış) olabilir

copy_data -- (in) değer 1, verilen verilerin mux'a kopyalanacağını, 0 değeri ise verilerin mux nesnesine kopyalanmayacağını gösterir.

İlerlemeler

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

WEBP_MUX_MEMORY_ERROR -- Bellek ayırma hatası.

WEBP_MUX_OK -- başarıya ulaştı.

WebPMuxPushFrame()

Mux nesnesinin sonuna bir çerçeve ekler.

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

Notes:

  1. frame.id, WEBP_CHUNK_ANMF veya WEBP_CHUNK_FRGM değerlerinden biri olmalıdır
  2. Animasyonlu olmayan, parçalanmamış bir resim ayarlamak için bunun yerine WebPMuxSetImage() kullanın.
  3. Aktarılan karenin türü, mux içindeki karelerle aynı olmalıdır.
  4. WebP yalnızca çift ofsetleri desteklediğinden tek ofset, şu ifade kullanılarak eşit bir konuma tutturulur: offset &= ~1
Parametreler

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

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

copy_data -- (in) değer 1, verilen verilerin mux'a kopyalanacağını, 0 değeri ise verilerin mux nesnesine kopyalanmayacağını gösterir.

İlerlemeler

WEBP_MUX_INVALID_ARGUMENT -- çok mux veya çerçeve NULL ise ya da çerçeve içeriği geçersizse.

WEBP_MUX_MEMORY_ERROR -- Bellek ayırma hatası.

WEBP_MUX_OK -- başarıya ulaştı.

WEBP_MUX_MEMORY_ERROR -- Bellek ayırma hatası.

WebPMuxGetFrame()

Mux nesnesinden n'inci kareyi alır. frame->bitstream içeriği, Malloc() kullanılarak tahsis edilir, mux nesnesine ait DEĞİLDİR. WebPDataClear() çağrısı yapılarak arayan tarafından ayrılması ZORUNLUDUR. nth=0 özel bir anlama sahiptir, yani son konuma sahiptir.

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

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

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

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

İlerlemeler

Çok sayı veya çerçeve NULL ise WEBP_MUX_INVALID_ARGUMENT.

WEBP_MUX_NOT_FOUND - Mux nesnesinde n'inci kareler varsa.

WEBP_MUX_BAD_DATA -- Mux'daki n'inci kare yığını geçersizse.

WEBP_MUX_OK -- başarıya ulaştı.

WebPMuxDeleteFrame()

Mux nesnesinden bir kareyi siler. nth=0 özel bir anlama, yani son konuma sahiptir.

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

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

nth -- (in) Karenin silineceği konum

İlerlemeler

Mux NULL ise WEBP_MUX_INVALID_ARGUMENT.

WEBP_MUX_NOT_FOUND -- Silme işleminden önce mux nesnede n'inci kareler varsa.

WEBP_MUX_OK -- başarıya ulaştı.

Animasyonlar

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ış) nesne

params -- (in) animasyon parametreleri.

İlerlemeler

WEBP_MUX_INVALID_ARGUMENT - mux veya params NULL ise.

WEBP_MUX_MEMORY_ERROR -- Bellek ayırma hatası.

WEBP_MUX_OK -- başarıya ulaştı.

WebPMuxGetAnimationParams()

Mux nesnesinden animasyon parametrelerini alır.

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

mux -- Animasyon parametrelerinin getirileceği (in) nesne

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

İlerlemeler

WEBP_MUX_INVALID_ARGUMENT - mux veya params NULL ise.

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

WEBP_MUX_OK -- başarıya ulaştı.

Çeşitli Yardımcı Programlar

WebPMuxGetCanvasSize()

Mux nesnesinden kanvas boyutunu alır.

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

Not: Bu yöntem, VP8X yığınının (varsa) güncel olduğunu varsayar. Diğer bir deyişle, mux nesne WebPMuxAssemble() veya WebPMuxCreate() için yapılan son çağrıdan bu yana değiştirilmemiştir.

Parametreler

mux -- Tuval boyutunun getirileceği (in) nesne

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

height -- (out) tuval yüksekliği

İlerlemeler

WEBP_MUX_INVALID_ARGUMENT - Mux, genişlik veya yükseklik NULL ise.

WEBP_MUX_BAD_DATA -- VP8X/VP8/VP8L yığın veya tuval boyutu geçersizse.

WEBP_MUX_OK -- başarıya ulaştı.

WebPMuxGetFeatures()

Mux nesnesinden özellik bayraklarını alır.

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

Not: Bu yöntem, VP8X yığınının (varsa) güncel olduğunu varsayar. Diğer bir deyişle, mux nesne WebPMuxAssemble() veya WebPMuxCreate() için yapılan son çağrıdan bu yana değiştirilmemiştir.

Parametreler

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

flags -- (dışarıda) mux nesnesinde bulunan özellikleri belirten flag'ler. Bu, çeşitli işaret değerleri için bir VEYA olacaktır. WebPFeatureFlags sıralaması, işaret değerlerini tek tek test etmek için kullanılabilir.

İlerlemeler

WEBP_MUX_INVALID_ARGUMENT -- çok mux veya flag'ler NULL ise.

WEBP_MUX_BAD_DATA -- VP8X/VP8/VP8L yığın veya tuval boyutu geçersizse.

WEBP_MUX_OK -- başarıya ulaştı.

WebPMuxNumChunks()

mux nesnesinde belirtilen etiket değerine sahip 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 -- Yığın türünü belirten (içinde) yığın kimliği

num_elements -- (out) belirtilen yığın kimliğine sahip parça sayısı

İlerlemeler

WEBP_MUX_INVALID_ARGUMENT -- mux veya num_elements NULL ise.

WEBP_MUX_OK -- başarıya ulaştı.

WebPMuxAssemble()

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

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

Not: Birleştirilmiş_veriler içeriği yok sayılır ve içeriğin üzerine yazılır. Ayrıca, assembled_data içeriği, Malloc() kullanılarak tahsis edilir ve assembled_data nesnesine ait DEĞİLDİR. Kimliğin, WebPDataClear() aramasıyla arayan tarafından tahsis edilmesi ZORUNLUDUR.

Parametreler

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

assembled_data - (dışarıda) derlenmiş WebP verileri

İlerlemeler

WEBP_MUX_BAD_DATA - Mux nesne geçersizse.

WEBP_MUX_INVALID_ARGUMENT -- mux veya buildd_data NULL ise.

WEBP_MUX_MEMORY_ERROR -- Bellek ayırma hatası.

WEBP_MUX_OK -- başarıya ulaştı.

WebPAnimEncoder API'sı

Bu API, animasyonlu WebP resimlerinin (muhtemelen) kodlanmasına 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()

Değişiklikten önce yeni bir WebPAnimEncoderOptions yapısı başlatmak için her zaman çağrılmalıdır. Sürüm uyuşmazlığı durumunda false (yanlış) değerini döndürür. WebPAnimEncoderOptionsInit(), enc_options nesnesini kullanmadan önce başarılı olmuş olmalıdır.

Parametreler
enc_options -- Animasyonu kodlama için kullanılan (giriş/çıkış) seçenekleri
İlerlemeler
Başarıda doğrudur.
int WebPAnimEncoderOptionsInit(
    WebPAnimEncoderOptions* enc_options);

WebPAnimEncoderNew()

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

Parametreler

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

enc_options -- (in) kodlama seçenekleri; makul varsayılanlar seçmek için NULL geçirilebilir.

İlerlemeler

Yeni oluşturulan WebPAnimEncoder nesnesine işaret eden bir işlev veya bellek hatası durumunda NULL.

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

WebPAnimEncoderAdd()

Belirtilen çerçeveyi WebP için optimize edin, kodlayın ve WebPAnimEncoder nesnesine ekleyin.

WebPAnimEncoderAdd için son çağrı frame = NULL ile yapılmalıdır. Bu, daha fazla çerçeve eklenmeyeceğini belirtir. Bu çağrı, son karenin süresini belirlemek için de kullanılır.

Parametreler

enc -- çerçevenin ekleneceği (giriş/çıkış) nesne.

çerçeve - ARGB veya YUV(A) biçiminde(giriş/çıkış) kare verileri. YUV(A) biçimindeyse ARGB'ye dönüştürülür ve bu da küçük bir kayba neden olur.

timestamp_ms -- Bu karenin milisaniye cinsinden zaman damgası (inç). Bir karenin süresi, "sonraki karenin zaman damgası - bu karenin zaman damgası" olarak hesaplanır. Bu nedenle, zaman damgaları azalan düzende olmamalıdır.

config -- (in) kodlama seçenekleri; makul varsayılan değerler seçmek için NULL iletilebilir.

İlerlemeler

Hata durumunda false döndürür ve frame->error_code uygun şekilde ayarlanır. Aksi takdirde, doğru 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ışına toplayın. Bu çağrının öncesinde frame = NULL içeren bir WebPAnimEncoderAdd çağrısı yapılmalıdır. Aksi takdirde son karenin süresi dahili olarak tahmin edilir.

Parametreler

enc -- çerçevelerin derleneceği (giriş/çıkış) nesne.

webp_data -- (out) oluşturulan WebP bit akışı.

İlerlemeler

Başarıda doğrudur.

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

WebPAnimEncoderGetError()

enc kullanarak en son çağrıya karşılık gelen hata dizesini alın. Döndürülen dize enc'ye aittir ve yalnızca bir sonraki WebPAnimEncoderAdd(), WebPAnimEncoderAssemble() veya WebPAnimEncoderDelete() çağrısına kadar geçerlidir.

Parametreler
enc -- Hata dizesinin alınacağı (giriş/çıkış) nesnedir.
İlerlemeler
NULL if enc is NULL. Aksi takdirde, enc için yapılan son çağrıda hata varsa hata dizesini, son çağrı başarılıysa boş bir dize döndürür.
const char* WebPAnimEncoderGetError(WebPAnimEncoder* enc);

WebPAnimEncoderDelete()

WebPAnimEncoder nesnesini siler.

Parametreler
enc -- silinecek (giriş/çıkış) nesne
void WebPAnimEncoderDelete(WebPAnimEncoder* enc);

Demux API'sı

WebP dosyalarından resim ve genişletilmiş biçim verilerinin çıkarılmasını etkinleştirir.

Kod Örnekleri

Tüm Çerçeveleri, ICC Profilini ve EXIF/XMP Meta Verilerini Çıkarmak için WebP Verilerini Engelleme

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

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

Ana/alt/düzeltmelerin her biri için 8 bit kullanılarak on altılı olarak paketlenmiş demux kitaplığının sürüm numarasını döndürür. Ör.2.5.7 sürümü: 0x020507.

int WebPGetDemuxVersion(void);

WebPDemux()

Data tarafından verilen WebP dosyasının tamamı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 verilen, büyük olasılıkla tamamlanmamış WebP dosyasını ayrıştırır. state NULL değilse demuxer'ın durumunu gösterecek şekilde ayarlanır.

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

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

WebPDemuxer işlevinin, veri bellek segmentine dahili işaretçileri sakladığını unutmayın. Bu veriler değişkense demuxer nesnesi silinmeli (WebPDemuxDelete() çağrısı uygulanarak) ve yeni verilerde WebPDemuxPartial() tekrar çağrılmalıdır. Bu genellikle düşük maliyetli bir işlemdir.

WebPDemuxDelete()

dmux ile ilişkili belleği boşaltır.

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'dan 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 > WEBP_DEMUX_PARSING_HEADER döndürdüyse geçerlidir.

Çerçeve İterasyonu

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 çerçevesini alır.

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

iter->fragment, bu işlevden döndürülen ilk parçayı işaret eder. WebPDemuxSelectFragment() kullanılarak bağımsız parçalar çıkarılabilir. frame_number değerinin 0'a eşit olması, resmin son karesini döndürür.

dmux NULL ise veya frame_number karesi mevcut değilse yanlış değerini döndürür. Yineleyici kullanımı tamamlandığında WebPDemuxReleaseIterator() çağrısı yapın.

Not: dmux, iter kullanım ömrü boyunca devam etmelidir.

WebPDemuxNextFrame(), WebPDemuxPrevFrame()

iter->fragment'ı, sonraki (iter->fragment + 1) veya önceki (iter->fragment - 1) kareye işaret edecek şekilde ayarlar. Bu işlevler döngüye girmez.

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

Başarılı olduğunda true (doğru), aksi takdirde false (yanlış) değerini döndürür.

WebPDemuxSelectFragment()

iter->fragment değerini, iter->fragment parça numarasını yansıtacak şekilde ayarlar.

int WebPDemuxSelectFragment(WebPIterator* iter, int fragment_num);

fragment_num parçası varsa 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ı iterasyonda sonraki tüm WebPDemuxGetChunk() çağrılarından önce çağrılmalıdır. Ayrıca, WebPDemuxDelete() ile ilişkili WebPDemuxer kaldırılmadan önce çağrılmalıdır.

Yığın İterasyonu

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

Yığının fourcc kimliğine sahip chunk_number örneğini dmux değerinden alır.

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

fourcc, döndürülecek yığının dört cc'sini içeren bir karakter dizisidir.Ör. "ICCP", "XMP ", "EXIF" vb.

chunk_number'ın 0'a eşit olması, bir gruptaki son yığını döndürür.

Yığın bulunursa true (doğru), değilse false (yanlış) değerini döndürür. Görüntüyle ilgili parça yüklerine WebPDemuxGetFrame() ve ilgili işlevler aracılığıyla erişilebilir. Yineleyici kullanımı tamamlandığında WebPDemuxReleaseChunkIterator() çağrısını yapın.

Not: dmux, yineleyicinin ömrü boyunca devam etmelidir.

WebPDemuxNextChunk(), WebPDemuxPrevChunk()

iter->chunk'ı sonraki (iter->chunk_num + 1) veya önceki (iter->chunk_num - 1) yığına işaret edecek şekilde ayarlar. Bu işlevler döngüye girmez.

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

Başarılı olduğunda true (doğru), aksi takdirde false (yanlış) değerini döndürür.

WebPDemuxReleaseChunkIterator()

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

void WebPDemuxReleaseChunkIterator(WebPChunkIterator* iter);

WebPDemuxDelete() ile ilişkili WebPDemuxer kaldırılmadan önce çağrılmalıdır.

WebPAnimDecoder API'si

Bu API, animasyonlu WebP görüntülerinin (muhtemelen) kodunun çözülmesini sağlar.

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

Değişiklikten önce yeni bir WebPAnimDecoderOptions yapısı başlatmak için her zaman çağrılmalıdır. Sürüm uyuşmazlığı durumunda false (yanlış) değerini döndürür. WebPAnimDecoderOptionsInit(), dec_options nesnesini kullanmadan önce başarılı olmuş olmalıdır.

Parametreler

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

İlerlemeler
Başarılı olmak
int WebPAnimDecoderOptionsInit(
    WebPAnimDecoderOptions* dec_options);

WebPAnimDecoderNew()

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

Parametreler

webp_data -- (in) WebP bit akışı. Bu, çıkış WebPAnimDecoder nesnesinin kullanım ömrü boyunca değişmeden kalmalıdır.

dec_options - (in) kod çözme seçenekleri. Makul varsayılanlar seçmek için NULL değeri iletilebilir (özellikle MODE_RGBA renk modu seçilir).

İlerlemeler

Yeni oluşturulan WebPAnimDecoder nesnesine işaret eden ya da ayrıştırma hatası, geçersiz seçenek veya bellek hatası durumunda NULL.

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

Animasyon hakkında 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 edinin.

Parametreler

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

bilgi - (out) animasyondan getirilen genel bilgiler.

İlerlemeler

Başarıda doğrudur.

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

WebPAnimDecoderGetNext()

WebPAnimDecoderNew()'a sunulan seçeneklere göre dec konumundan sonraki kareyi getirir. Bu, yalnızca çerçevenin alt dikdörtgenini değil, canvas_width * 4 * canvas_height boyutunda tümüyle yeniden oluşturulmuş bir tuval olacaktır. Döndürülen arabellek arabelleği yalnızca bir sonraki WebPAnimDecoderGetNext(), WebPAnimDecoderReset() veya WebPAnimDecoderDelete() çağrısına kadar geçerlidir.

Parametreler

dec -- Sonraki karenin getirileceği (giriş/çıkış) kod çözücü örneği.

buf -- (giden) kodu çözülmüş kare.

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

İlerlemeler

Bağımsız değişkenlerden herhangi biri NULL ise, ayrıştırma veya kod çözme hatası varsa ya da daha fazla çerçeve yoksa yanlış değerini alır. Aksi takdirde, doğru değerini döndürür.

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

WebPAnimDecoderHasMoreFrames()

Kodu çözülecek daha fazla kare olup olmadığını kontrol edin.

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

WebPAnimDecoderReset()

WebPAnimDecoder nesnesini sıfırlar. Böylece WebPAnimDecoderGetNext() için yapılan bir sonraki çağrı, kod çözmeyi 1. kareden yeniden başlatır. Bu, dec nesnesini yok edip yeniden oluşturmadan tüm karelerin kodunun birden fazla kez çözülmesini gerektiğinde (ör. info.loop_count kez) faydalıdır.

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

WebPAnimDecoderGetDemuxer()

Dahili demuxer nesnesini tutun.

Kullanıcı yalnızca demuxer üzerinden kullanılabilen işlemleri kullanmak istiyorsa (ör. XMP/EXIF/ICC meta verilerini almak için) demuxer nesnesini almak faydalı olabilir. Döndürülen demuxer nesnesinin sahibi dec olur ve yalnızca bir sonraki WebPAnimDecoderDelete() çağrısına kadar geçerlidir.

Parametreler
dec -- Çözücü nesnesinin getirileceği (in) kod çözücü örneği.
const WebPDemuxer* WebPAnimDecoderGetDemuxer(const WebPAnimDecoder* dec);

WebPAnimDecoderDelete()

WebPAnimDecoder nesnesini siler.

Parametreler
dec -- (giriş/çıkış) kod çözücü örneği silinecek.
İlerlemeler
Başarıda doğrudur.
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() yöntemini çağırarak webp_data nesnesinin içeriğini temizler. Nesnenin kendisini ayırmaz.

void WebPDataClear(WebPData* webp_data);

WebPDataCopy()

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

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