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:
- frame.id,
WEBP_CHUNK_ANMF
veyaWEBP_CHUNK_FRGM
değerlerinden biri olmalıdır - Animasyonlu olmayan, parçalanmamış bir resim ayarlamak için bunun yerine
WebPMuxSetImage()
kullanın. - Aktarılan karenin türü, mux içindeki karelerle aynı olmalıdır.
- 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, ×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.
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);