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 ccWEBP_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:
- çerçeve.id,
WEBP_CHUNK_ANMF
veyaWEBP_CHUNK_FRGM
değerlerinden biri olmalıdır - Animasyonsuz parçalanmamış bir resmi ayarlamak için şunu kullanın:
Bunun yerine
WebPMuxSetImage()
. - Aktarılan çerçevenin türü, mux'teki karelerle aynı olmalıdır.
- 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->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->fragment'i sonrakiyi işaret edecek şekilde ayarlar (iter->fragment + 1) veya önceki (iter->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->fragment'yı, iter->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, ×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()
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);