WebP Container API 문서

WebP 이미지의 RIFF 컨테이너 조작

Mux API

색상과 같은 기능이 포함된 WebP 컨테이너 이미지를 조작할 수 있습니다. 프로필, 메타데이터, 애니메이션, 조각화된 이미지가 포함됩니다.

코드 예제

이미지 데이터, 색상 프로필, XMP 메타데이터로 MUX 만들기

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

WebP 파일에서 이미지 및 색상 프로필 데이터 가져오기

int copy_data = 0;
// ... (Read data from file).
WebPMux* mux = WebPMuxCreate(&data, copy_data);
WebPMuxGetFrame(mux, 1, &image);
// ... (Consume image; e.g. call WebPDecode() to decode the data).
WebPMuxGetChunk(mux, "ICCP", &icc_profile);
// ... (Consume icc_data).
WebPMuxDelete(mux);
free(data);

Mux 객체의 수명

열거형

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

다음을 사용하여 16진수로 압축된 mux 라이브러리의 버전 번호를 반환합니다. 각 메이저/부 버전/버전에 대해 8비트. 예를 들어 v2.5.7은 0x020507입니다.

int WebPGetMuxVersion(void);

WebPMuxNew()

빈 mux 객체를 만듭니다.

WebPMux* WebPMuxNew(void);
반환 값
새로 생성된 빈 mux 객체에 대한 포인터입니다.

WebPMuxDelete()

mux 객체를 삭제합니다.

void WebPMuxDelete(WebPMux* mux);
매개변수
mux -- (in/out) 삭제할 객체

Mux 생성

WebPMuxCreate()

WebP RIFF 형식으로 제공된 원시 데이터에서 mux 객체를 생성합니다.

WebPMux* WebPMuxCreate(const WebPData* bitstream, int copy_data);
매개변수

bitstream -- (In) WebP RIFF 형식의 비트스트림 데이터

copy_data -- (in) 값 1은 지정된 데이터가 Mux에 복사됨을 나타냅니다. 값 0은 데이터가 mux 객체에 복사되지 않음을 나타냅니다.

반환 값

성공 시 지정된 데이터에서 생성된 mux 객체에 대한 포인터

NULL -- 잘못된 데이터 또는 메모리 오류가 있는 경우.

이미지가 아닌 덩어리

WebPMuxSetChunk()

mux 객체에 ID가 fourcc이고 데이터 chunk_data가 포함된 청크를 추가합니다. 모든 문자 ID가 동일한 기존 청크는 삭제됩니다.

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

참고: 이미지와 관련 없는 청크만 청크 API를 통해 관리해야 합니다. (이미지 관련 청크는 'ANMF', 'FRGM', 'VP8 ', 'VP8L' 및 'ALPH'입니다.) 추가하려면 이미지 가져오기 및 삭제, WebPMuxSetImage() 사용 WebPMuxPushFrame(), WebPMuxGetFrame()WebPMuxDeleteFrame().

매개변수

mux -- 청크를 추가할 (in/out) 객체

fourcc -- (in) 주어진 chunk; 예: 'ICCP', 'XMP', 'EXIF' 기타

chunk_data -- (in) 추가할 청크 데이터

copy_data -- (in) 값 1은 지정된 데이터가 Mux에 복사됨을 나타냅니다. 값 0은 데이터가 mux 객체에 복사되지 않음을 나타냅니다.

반환 값

WEBP_MUX_INVALID_ARGUMENT -- mux, Fourcc 또는 chunk_data가 NULL이거나 Fourcc는 이미지 청크에 해당합니다.

WEBP_MUX_MEMORY_ERROR: 메모리 할당 오류 시

WEBP_MUX_OK: 성공 시

WebPMuxGetChunk()

Mux 객체에서 ID가 fourcc인 청크 데이터 참조를 가져옵니다. 호출자는 반환된 데이터를 해제해서는 안 됩니다.

WebPMuxError WebPMuxGetChunk(const WebPMux* mux,
                             const char fourcc[4],
                             WebPData* chunk_data);
매개변수

mux -- 청크 데이터를 가져올 (내부) 객체

fourcc -- (in) 청크의 4cc를 포함하는 문자 배열입니다. 예: 'ICCP', 'XMP', 'EXIF' 기타

chunk_data -- (out) 반환된 청크 데이터

반환 값

WEBP_MUX_INVALID_ARGUMENT -- mux, Fourcc 또는 chunk_data가 NULL이거나 Fourcc는 이미지 청크에 해당합니다.

WEBP_MUX_NOT_FOUND -- mux에 지정된 있습니다.

WEBP_MUX_OK: 성공 시

WebPMuxDeleteChunk()

주어진 fourcc를 포함하는 청크를 Mux 객체에서 삭제합니다.

WebPMuxError WebPMuxDeleteChunk(WebPMux* mux, const char fourcc[4]);
매개변수

mux -- 청크를 삭제할 (in/out) 객체

fourcc -- (in) 청크의 4cc를 포함하는 문자 배열입니다. 예: 'ICCP', 'XMP', 'EXIF' 기타

반환 값

WEBP_MUX_INVALID_ARGUMENT -- mux 또는 Fourcc가 NULL이거나 Fourcc인 경우 해당하는 양입니다.

WEBP_MUX_NOT_FOUND -- mux에 지정된 Fourcc는

WEBP_MUX_OK: 성공 시

이미지

단일 프레임/프래그먼트에 관한 데이터를 캡슐화합니다.

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 객체에서 (애니메이션과 조각이 없는) 이미지를 설정합니다. 참고: 프레임/프래그먼트를 포함한 기존 이미지가 모두 삭제됩니다.

WebPMuxError WebPMuxSetImage(WebPMux* mux,
                             const WebPData* bitstream,
                             int copy_data);
매개변수

mux -- 이미지를 설정할 (in/out) 객체

bitstream -- (in)은 원시 VP8/VP8L 비트스트림 또는 단일 이미지 WebP일 수 있습니다. 파일 (애니메이션과 조각이 없는 파일)

copy_data -- (in) 값 1은 지정된 데이터가 Mux에 복사됨을 나타냅니다. 값 0은 데이터가 mux 객체에 복사되지 않음을 나타냅니다.

반환 값

WEBP_MUX_INVALID_ARGUMENT: mux가 NULL이거나 비트스트림이 NULL인 경우.

WEBP_MUX_MEMORY_ERROR: 메모리 할당 오류 시

WEBP_MUX_OK: 성공 시

WebPMuxPushFrame()

Mux 객체의 끝에 프레임을 추가합니다.

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

참고:

  1. frame.id는 WEBP_CHUNK_ANMF 또는 WEBP_CHUNK_FRGM 중 하나여야 합니다.
  2. 애니메이션이 아닌 비 조각화 이미지를 설정하려면 대신 WebPMuxSetImage()를 사용하세요.
  3. 푸시되는 프레임 유형은 mux의 프레임과 동일해야 합니다.
  4. WebP는 짝수 오프셋만 지원하므로 홀수 오프셋은 모두 맞춰집니다. 오프셋 &= ~1을 사용하여 짝수 위치로 이동할 수 있습니다.
매개변수

mux -- 프레임을 추가할 (in/out) 객체

frame -- 프레임 데이터(in)입니다.

copy_data -- (in) 값 1은 지정된 데이터가 Mux에 복사됨을 나타냅니다. 값 0은 데이터가 mux 객체에 복사되지 않음을 나타냅니다.

반환 값

WEBP_MUX_INVALID_ARGUMENT -- mux 또는 frame이 NULL이거나 frame이 잘못되었습니다.

WEBP_MUX_MEMORY_ERROR: 메모리 할당 오류 시

WEBP_MUX_OK: 성공 시

WEBP_MUX_MEMORY_ERROR: 메모리 할당 오류 시

WebPMuxGetFrame()

mux 객체에서 n번째 프레임을 가져옵니다. frame->bitstream의 콘텐츠는 다음과 같습니다. malloc()을 사용하여 할당되고 mux 객체가 소유하지 않은 것입니다. 다음을 충족해야 합니다. WebPDataClear()를 호출하여 호출자에 의해 할당 해제되었습니다. n번째=0 마지막 위치라는 특별한 의미가 있습니다.

WebPMuxError WebPMuxGetFrame(const WebPMux* mux,
                             uint32_t nth,
                             WebPMuxFrameInfo* frame);
매개변수

mux -- 정보를 가져올 객체(내부)

nth -- (in) mux 객체의 프레임 색인

frame -- 반환된 프레임의 (out) 데이터

반환 값

WEBP_MUX_INVALID_ARGUMENT -- if mux or frame is NULL.

WEBP_MUX_NOT_FOUND: Mux에 n번째 프레임이 없는 경우 객체를 지정합니다.

WEBP_MUX_BAD_DATA: mux의 n번째 프레임 청크가 잘못된 경우.

WEBP_MUX_OK: 성공 시

WebPMuxDeleteFrame()

mux 객체에서 프레임을 삭제합니다. nth=0은 특별한 의미가 있음 - 마지막 있습니다.

WebPMuxError WebPMuxDeleteFrame(WebPMux* mux, uint32_t nth);
매개변수

mux -- 프레임을 삭제할 (인/아웃) 객체

nth -- (in) 프레임이 삭제될 위치입니다.

반환 값

WEBP_MUX_INVALID_ARGUMENT -- if mux is NULL.

WEBP_MUX_NOT_FOUND: Mux에 n번째 프레임이 없는 경우 객체를 정의합니다.

WEBP_MUX_OK: 성공 시

애니메이션

애니메이션 매개변수

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 객체의 애니메이션 매개변수를 설정합니다. 기존의 모든 ANIM 청크는 삭제됩니다.

WebPMuxError WebPMuxSetAnimationParams(WebPMux* mux,
                                       const WebPMuxAnimParams* params);
매개변수

mux -- ANIM 청크를 설정/추가할 (인/아웃) 객체입니다.

params -- (in) 애니메이션 매개변수입니다.

반환 값

WEBP_MUX_INVALID_ARGUMENT -- mux 또는 params가 NULL인 경우.

WEBP_MUX_MEMORY_ERROR: 메모리 할당 오류 시

WEBP_MUX_OK: 성공 시

WebPMuxGetAnimationParams()

mux 객체에서 애니메이션 매개변수를 가져옵니다.

WebPMuxError WebPMuxGetAnimationParams(const WebPMux* mux,
                                       WebPMuxAnimParams* params);
매개변수

mux -- 가져올 애니메이션 매개변수를 가져올 객체입니다.

params -- ANIM 청크에서 추출된 (out) 애니메이션 매개변수입니다.

반환 값

WEBP_MUX_INVALID_ARGUMENT -- mux 또는 params가 NULL인 경우.

WEBP_MUX_NOT_FOUND: ANIM 청크가 mux 객체에 없는 경우

WEBP_MUX_OK: 성공 시

기타 공공 기간 산업

WebPMuxGetCanvasSize()

Mux 객체에서 캔버스 크기를 가져옵니다.

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

참고: 이 방법에서는 VP8X 청크(있는 경우)가 최신이라고 가정합니다. 즉, WebPMuxAssemble() 또는 WebPMuxCreate().

매개변수

mux -- 캔버스 크기를 가져올 객체(내부)입니다.

너비 -- (바깥쪽) 캔버스 너비

높이 -- (외부) 캔버스 높이

반환 값

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

WEBP_MUX_BAD_DATA: VP8X/VP8/VP8L 청크 또는 캔버스 크기가 잘못된 경우.

WEBP_MUX_OK: 성공 시

WebPMuxGetFeatures()

mux 객체에서 기능 플래그를 가져옵니다.

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

참고: 이 방법에서는 VP8X 청크(있는 경우)가 최신이라고 가정합니다. 즉, WebPMuxAssemble() 또는 WebPMuxCreate().

매개변수

mux -- 특성을 가져올 객체(내부)입니다.

flags -- (out) Mux에 있는 기능을 지정하는 플래그 객체를 지정합니다. 다양한 플래그 값의 OR이 됩니다. 열거형 WebPFeatureFlags 개별 플래그 값을 테스트하는 데 사용할 수 있습니다.

반환 값

WEBP_MUX_INVALID_ARGUMENT -- if mux or flags is NULL.

WEBP_MUX_BAD_DATA: VP8X/VP8/VP8L 청크 또는 캔버스 크기가 잘못된 경우.

WEBP_MUX_OK: 성공 시

WebPMuxNumChunks()

mux 객체에 지정된 태그 값이 있는 청크 수를 가져옵니다.

WebPMuxError WebPMuxNumChunks(const WebPMux* mux,
                              WebPChunkId id,
                              int* num_elements);
매개변수

mux -- 정보를 가져올 객체(내부)

id -- (in) 청크 ID로 청크 유형을 지정합니다.

num_elements -- 지정된 청크 ID가 있는 (out) 청크 수

반환 값

WEBP_MUX_INVALID_ARGUMENT -- if mux, or num_elements is NULL.

WEBP_MUX_OK: 성공 시

WebPMuxAssemble()

WebP RIFF 형식의 모든 청크를 어셈블하고 assembled_data로 반환합니다. 이 함수는 또한 mux 객체의 유효성을 검사합니다.

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

참고: assembled_data의 콘텐츠는 무시되고 덮어쓰기됩니다. 또한 assembled_data의 콘텐츠는 malloc()을 사용하여 할당됩니다. mux 객체가 소유하는 것을 볼 수 있습니다. 호출자가 다음을 호출하여 할당 해제해야 합니다(MUST). WebPDataClear()

매개변수

mux -- 청크를 조합할 (in/out) 객체

assembled_data -- (out) 조합된 WebP 데이터

반환 값

WEBP_MUX_BAD_DATA -- mux 객체가 잘못된 경우.

WEBP_MUX_INVALID_ARGUMENT -- if mux or assembled_data is NULL.

WEBP_MUX_MEMORY_ERROR: 메모리 할당 오류 시

WEBP_MUX_OK: 성공 시

WebPAnimEncoder API

이 API를 사용하면 애니메이션 WebP 이미지를 인코딩할 수 있습니다.

코드 예

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.

전역 옵션

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

WebPAnimEncoderOptions를 초기화하려면 항상 호출되어야 합니다. 구성을 변경할 수 있습니다. 버전이 일치하지 않으면 false를 반환합니다. WebPAnimEncoderOptionsInit()은 enc_options 객체를 연결합니다.

매개변수
enc_options: 애니메이션 인코딩에 사용되는 (in/out) 옵션입니다.
반환 값
성공 시 참입니다.
int WebPAnimEncoderOptionsInit(
    WebPAnimEncoderOptions* enc_options);

WebPAnimEncoderNew()

WebPAnimEncoder 객체를 생성하고 초기화합니다.

매개변수

너비/높이 -- (in) 캔버스 애니메이션의 너비 및 높이입니다.

enc_options -- (in) 인코딩 옵션입니다. NULL을 전달하여 적절한 기본값입니다.

반환 값

새로 만든 WebPAnimEncoder 객체에 대한 포인터 또는 NULL(있는 경우) 메모리 오류가 발생할 수 있습니다.

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

WebPAnimEncoderAdd()

주어진 프레임을 WebP용으로 최적화하고 인코딩하여 WebPAnimEncoder 객체

WebPAnimEncoderAdd에 대한 마지막 호출은 frame = NULL를 사용해야 합니다. 는 더 이상 추가할 프레임이 없음을 나타냅니다. 이 호출은 마지막 프레임의 지속 시간을 결정합니다.

매개변수

enc -- 프레임을 추가할 (in/out) 객체입니다.

frame -- ARGB 또는 YUV(A) 형식의(in/out) 프레임 데이터입니다. 포함된 경우 YUV(A) 형식을 사용하는 경우 ARGB로 변환되므로 약간의 손실이 발생합니다.

timestamp_ms -- 이 프레임의 타임스탬프(밀리초)입니다. Duration(기간) 는 "timestamp of next frame - timestamp of(다음 프레임의 타임스탬프 - 타임스탬프)로 계산됩니다. '이 프레임'으로 설정합니다. 따라서 타임스탬프는 내림차순이어야 합니다.

config -- (in)coding options(인코딩 옵션) NULL을 전달하여 적절한 기본값입니다.

반환 값

오류가 발생하면 false가 반환되고 frame->error_code가 적절하게 설정됩니다. 그렇지 않으면 true를 반환합니다.

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

WebPAnimEncoderAssemble()

지금까지 추가된 모든 프레임을 WebP 비트스트림에 어셈블합니다. 이 통화는 frame = NULLWebPAnimEncoderAdd를 호출합니다. 그렇지 않은 경우 마지막 프레임의 지속 시간은 내부적으로 추정됩니다.

매개변수

enc -- 프레임을 조립할 (in/out) 객체입니다.

webp_data -- (out) 생성된 WebP 비트스트림입니다.

반환 값

성공 시 true입니다.

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

WebPAnimEncoderGetError()

enc를 사용하여 가장 최근 호출에 해당하는 오류 문자열을 가져옵니다. 이 반환된 문자열은 enc가 소유하며 다음 함수가 호출될 때까지만 유효합니다. WebPAnimEncoderAdd() 또는 WebPAnimEncoderAssemble() 또는 WebPAnimEncoderDelete()를 탭합니다.

매개변수
enc: 오류 문자열을 가져올 (in/out) 객체입니다.
반환 값
NULL if enc is NULL. 그렇지 않은 경우 마지막 오류가 발생한 경우 오류 문자열을 반환합니다. enc 호출에 오류가 있거나 마지막 호출이 성공입니다.
const char* WebPAnimEncoderGetError(WebPAnimEncoder* enc);

WebPAnimEncoderDelete()

WebPAnimEncoder 객체를 삭제합니다.

매개변수
enc: 삭제할 (in/out) 객체
void WebPAnimEncoderDelete(WebPAnimEncoder* enc);

Demux API

WebP 파일에서 이미지 및 확장 형식 데이터 추출을 사용 설정합니다.

코드 예제

WebP 데이터를 역다중화하여 모든 프레임, ICC 프로필 및 EXIF/XMP 메타데이터 추출

WebPDemuxer* demux = WebPDemux(&webp_data);

uint32_t width = WebPDemuxGetI(demux, WEBP_FF_CANVAS_WIDTH);
uint32_t height = WebPDemuxGetI(demux, WEBP_FF_CANVAS_HEIGHT);
// ... (Get information about the features present in the WebP file).
uint32_t flags = WebPDemuxGetI(demux, WEBP_FF_FORMAT_FLAGS);

// ... (Iterate over all frames).
WebPIterator iter;
if (WebPDemuxGetFrame(demux, 1, &iter)) {
  do {
    // ... (Consume 'iter'; e.g. Decode 'iter.fragment' with WebPDecode(),
    // ... and get other frame properties like width, height, offsets etc.
    // ... see 'struct WebPIterator' below for more info).
  } while (WebPDemuxNextFrame(&iter));
  WebPDemuxReleaseIterator(&iter);
}

// ... (Extract metadata).
WebPChunkIterator chunk_iter;
if (flags & ICCP_FLAG) WebPDemuxGetChunk(demux, "ICCP", 1, &chunk_iter);
// ... (Consume the ICC profile in 'chunk_iter.chunk').
WebPDemuxReleaseChunkIterator(&chunk_iter);
if (flags & EXIF_FLAG) WebPDemuxGetChunk(demux, "EXIF", 1, &chunk_iter);
// ... (Consume the EXIF metadata in 'chunk_iter.chunk').
WebPDemuxReleaseChunkIterator(&chunk_iter);
if (flags & XMP_FLAG) WebPDemuxGetChunk(demux, "XMP ", 1, &chunk_iter);
// ... (Consume the XMP metadata in 'chunk_iter.chunk').
WebPDemuxReleaseChunkIterator(&chunk_iter);
WebPDemuxDelete(demux);

Demux 객체의 수명

열거형

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

다음을 사용하여 16진수로 압축된 demux 라이브러리의 버전 번호를 반환합니다. 각 메이저/부 버전/버전에 대해 8비트. 예를 들어 v2.5.7은 0x020507입니다.

int WebPGetDemuxVersion(void);

WebPDemux()

data에서 제공된 전체 WebP 파일을 파싱합니다.

WebPDemuxer WebPDemux(const WebPData* data);

파싱에 성공하면 WebPDemuxer 객체를 반환하고 그렇지 않으면 NULL을 반환합니다.

WebPDemuxPartial()

data에서 제공된 불완전할 수 있는 WebP 파일을 파싱합니다. state가 디뮤서의 상태를 나타내도록 설정됩니다.

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

오류가 발생하거나 파싱을 시작할 데이터가 충분하지 않은 경우 NULL을 반환합니다. 파싱 성공 시 WebPDemuxer 객체가 반환됩니다.

WebPDemuxer데이터 메모리 세그먼트의 내부 포인터를 유지합니다. 만약 이 데이터는 휘발성이므로 디뮤텍스 객체를 삭제해야 합니다( WebPDemuxDelete()) 및 WebPDemuxPartial()가 새 데이터에 관해 다시 호출했습니다. 이것은 일반적으로 비용이 적게 드는 작업입니다.

WebPDemuxDelete()

dmux와 연결된 메모리를 해제합니다.

void WebPDemuxDelete(WebPDemuxer* dmux);

데이터/정보 추출

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에서 feature 값을 가져옵니다.

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

참고: 값은 WebPDemux()이 사용되었거나 WebPDemuxPartial()에서 > 상태를 반환했습니다. WEBP_DEMUX_PARSING_HEADER

프레임 반복

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에서 frame_number 프레임을 검색합니다.

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

iter-&gt;fragment는 이 함수에서 반환되면 첫 번째 프래그먼트를 가리킵니다. 개별 프래그먼트는 WebPDemuxSelectFragment() 설정 frame_number가 0이면 이미지의 마지막 프레임을 반환합니다.

dmux가 NULL이거나 dmux 프레임이 없으면 false를 반환합니다. 다음을 사용할 때 WebPDemuxReleaseIterator()를 호출합니다. 반복자가 완료됩니다.

참고: dmuxiter의 전체 기간 동안 지속되어야 합니다.

WebPDemuxNextFrame(), WebPDemuxPrevFrame()

다음 (iter-&gt;fragment + 1)을 가리키도록 iter-&gt;fragment를 설정합니다. 이전 (iter-&gt;frame_num - 1) 프레임입니다. 이러한 함수는 반복되지 않습니다.

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

성공 시 true를 반환하고 그렇지 않으면 false를 반환합니다.

WebPDemuxSelectFragment()

프래그먼트 번호 iter-&gt;fragment을 반영하도록 iter-&gt;fragment를 설정합니다.

int WebPDemuxSelectFragment(WebPIterator* iter, int fragment_num);

프래그먼트 fragment_num이 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다.

WebPDemuxReleaseIterator()

iter와 연결된 메모리를 해제합니다.

void WebPDemuxReleaseIterator(WebPIterator* iter);

다음에 대한 후속 호출 전에 호출해야 합니다. 동일한 반복에 대한 WebPDemuxGetChunk() 또한 연결된 WebPDemuxer를 소멸시키기 전에 호출됩니다. WebPDemuxDelete()

청크 반복

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

ID가 fourcc인 청크의 chunk_number 인스턴스를 검색합니다. dmux

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

fourcc는 반환할 청크의 4cc가 포함된 문자 배열입니다. 예: 'ICCP', 'XMP', 'EXIF' 등

chunk_number를 0으로 설정하면 세트의 마지막 청크가 반환됩니다.

청크를 찾으면 true를 반환하고 그렇지 않으면 false를 반환합니다. 이미지 관련 청크 WebPDemuxGetFrame()를 통해 페이로드에 액세스 관련 기능이 있습니다 전화걸기 WebPDemuxReleaseChunkIterator() 사용 시 반복자의 상태가 완료됩니다

참고: dmux는 반복자의 수명 동안 지속되어야 합니다.

WebPDemuxNextChunk(), WebPDemuxPrevChunk()

다음 (iter->chunk_num + 1)을 가리키도록 iter->chunk를 설정합니다. 또는 이전 (iter->chunk_num - 1) 청크를 반환합니다. 이러한 함수는 반복되지 않습니다.

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

성공 시 true를 반환하고 그렇지 않으면 false를 반환합니다.

WebPDemuxReleaseChunkIterator()

iter와 연결된 메모리를 해제합니다.

void WebPDemuxReleaseChunkIterator(WebPChunkIterator* iter);

다음과 같이 연결된 WebPDemuxer를 소멸시키기 전에 호출해야 합니다. WebPDemuxDelete()

WebPAnimDecoder API

이 API를 사용하면 애니메이션 WebP 이미지를 디코딩할 수 있습니다 (가능한 경우).

코드 예

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.

전역 옵션

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

WebPAnimDecoderOptions를 초기화하려면 항상 호출되어야 합니다. 구성을 변경할 수 있습니다. 버전이 일치하지 않으면 false를 반환합니다. WebPAnimDecoderOptionsInit()는 dec_options 객체입니다.

매개변수

dec_options -- (in/out) 애니메이션 디코딩에 사용되는 옵션입니다.

반환 값
성공 시 참
int WebPAnimDecoderOptionsInit(
    WebPAnimDecoderOptions* dec_options);

WebPAnimDecoderNew()

WebPAnimDecoder 객체를 만들고 초기화합니다.

매개변수

webp_data -- (In) WebP 비트스트림 이 값은 출력 WebPAnimDecoder 객체의 전체 기간

dec_options -- (in) 디코딩 옵션입니다. 선택을 위해 NULL을 전달할 수 있습니다. 적절한 기본값 (특히, 색상 모드 MODE_RGBA가 선택됩니다.)

반환 값

새로 만든 WebPAnimDecoder 객체에 대한 포인터 또는 NULL(있는 경우) 파싱 오류, 잘못된 옵션 또는 메모리 오류

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

애니메이션에 대한 전역 정보입니다.

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

WebPAnimDecoderGetInfo()

애니메이션에 관한 전역 정보를 가져옵니다.

매개변수

dec -- 정보를 가져올 디코더 인스턴스 내입니다.

info -- 애니메이션에서 가져온 전역 정보(외부)입니다.

반환 값

성공 시 true입니다.

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

WebPAnimDecoderGetNext()

다음에 제공된 옵션에 따라 dec에서 다음 프레임을 가져옵니다. WebPAnimDecoderNew() 이렇게 하면 크기가 canvas_width * 4 * canvas_height인 복원된 캔버스뿐만 아니라 프레임 하위 직사각형이 포함됩니다. 반환된 버퍼 bufWebPAnimDecoderGetNext()님에게 건 다음번 전화입니다. WebPAnimDecoderReset() 또는 WebPAnimDecoderDelete():

매개변수

dec -- (인/아웃) 디코더 인스턴스이며 이 인스턴스에서 다음 프레임이 있습니다.

buf -- (out) 디코딩된 프레임입니다.

timestamp -- 프레임의 (out) 타임스탬프(밀리초)입니다.

반환 값

인수가 NULL이거나 파싱 또는 더 이상 프레임이 없을 수도 있습니다. 그렇지 않으면 true를 반환합니다.

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

WebPAnimDecoderHasMoreFrames()

디코딩할 프레임이 더 있는지 확인합니다.

매개변수
dec: 확인할 디코더 인스턴스(내부)입니다.
반환 값
dec가 NULL이 아니며 일부 프레임이 아직 디코딩되지 않은 경우 참입니다. 그 이외의 경우는 false를 반환합니다.
int WebPAnimDecoderHasMoreFrames(const WebPAnimDecoder* dec);

WebPAnimDecoderReset()

다음에 호출되도록 WebPAnimDecoder 객체를 재설정합니다. WebPAnimDecoderGetNext()에서 디코딩을 다시 시작합니다. 확인할 수 있습니다. 이는 모든 프레임을 디코딩해야 할 때 유용합니다. 삭제 및 재생성하지 않고 여러 번 (예: info.loop_count 횟수) dec 객체입니다.

매개변수
dec: 재설정할 (인/아웃) 디코더 인스턴스
void WebPAnimDecoderReset(WebPAnimDecoder* dec);

WebPAnimDecoderGetDemuxer()

내부 디뮤서 객체를 가져옵니다.

작업만 사용하려는 경우 demuxer 객체를 가져오는 것이 유용할 수 있음 demuxer를 통해 제공 예: XMP/EXIF/ICC 메타데이터를 얻어야 합니다. 반환된 demuxer 객체는 dec의 소유이며 다음 호출 시까지만 유효합니다. WebPAnimDecoderDelete()

매개변수
dec -- (in) demuxer 객체가 있는 디코더 인스턴스 있습니다.
const WebPDemuxer* WebPAnimDecoderGetDemuxer(const WebPAnimDecoder* dec);

WebPAnimDecoderDelete()

WebPAnimDecoder 객체를 삭제합니다.

매개변수
dec: 삭제할 (인/아웃) 디코더 인스턴스
반환 값
성공 시 참입니다.
void WebPAnimDecoderDelete(WebPAnimDecoder* dec);

일반적인 데이터 유형

열거형

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 객체의 콘텐츠를 초기화합니다.

void WebPDataInit(WebPData* webp_data);

WebPDataClear()

free()를 호출하여 webp_data 객체의 콘텐츠를 지웁니다. 제외 객체 자체를 할당 해제하는 데 사용될 수 있습니다.

void WebPDataClear(WebPData* webp_data);

WebPDataCopy()

dst에 필요한 저장소를 할당하고 src의 콘텐츠를 복사합니다. 성공 시 true를 반환합니다.

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