Rust-Image를 사용하여 절차적으로 이미지 생성

Nilesh Katuwal 2022년6월7일
Rust-Image를 사용하여 절차적으로 이미지 생성

이 기사에서는 Rust-image를 사용하여 절차적으로 이미지를 생성하는 방법을 배웁니다.

Rust-Image를 사용하여 절차적으로 이미지 생성

상자 이미지

이 크레이트는 이미지 인코딩 및 디코딩과 기본적인 이미지 조작 기능을 위한 네이티브 Rust 구현을 제공합니다. 추가 문서는 GitHub에서 편리하게 볼 수 있는 README.md 파일에서도 사용할 수 있습니다.

이 라이브러리는 이미지 인코딩을 위한 통합 인터페이스와 콘텐츠에 대한 단순 일반 버퍼라는 두 가지 근본적인 문제에 대한 솔루션을 제공합니다. 각 기능은 다른 기능과 독립적으로 사용할 수 있습니다.

추가 특수 상자로 보완할 수 있는 작고 안정적인 일상 작업에 초점을 맞춥니다. 또한 라이브러리는 종속성이 거의 없는 보안 솔루션을 선호합니다.

io::Reader를 사용하여 이미지를 로드하려면:

use std::io::Cursor;
use image::io::Reader as ImageReader;

let img_one = ImageReader::open("imagetest.png")?.decode()?;
let img_two = ImageReader::new(Cursor::new(bytes)).with_guessed_format()?.decode()?;

이미지를 저장하려면:

img.save("theimage.jpg")?;

let mut bytes: Vec<u8> = Vec::new();
img2.write_to(&mut Cursor::new(&mut bytes), image::ImageOutputFormat::Png)?;

이미지 버퍼

두 가지 기본 이미지 저장 형식:

  1. 정적으로 유형이 지정된 이미지 데이터를 저장하는 이미지 버퍼.
  2. DynamicImage는 지원되는 ImageBuffer 형식 간의 변환을 지원하는 열거형입니다.

몇 가지 특수 옵션 외에도:

  1. 변경 가능한 이미지 버퍼에 대한 GenericImage 특성.
  2. 읽기 전용 GenericImage 참조에 대한 GenericImageView 특성.
  3. 일반 채널 매트릭스 및 외부 인터페이스에 대한 상호 운용성 유형을 포함하는 flat 모듈.

제공된 모든 이미지 처리 기능은 GenericImageViewGenericImage 특성을 구현하고 ImageBuffer.를 반환하는 유형에서 작동합니다. 모든 이미지 형식 디코더는 이미지 메타데이터를 검색하고 이미지를 디코딩하기 위한 기본적인 방법을 제공하는 ImageDecoder 특성을 구현합니다.

일부 형식은 한 번에 이미지의 일부만 디코딩할 수 있는 ImageDecoderExt 구현을 추가로 제공합니다.

가장 중요한 디코딩 기술은 다음과 같습니다.

  1. 차원: 이미지의 너비와 높이가 있는 튜플을 반환합니다.
  2. 색상 유형: 이 디코더가 출력하는 이미지 데이터의 색상 유형을 반환합니다.
  3. 이미지 읽기: 전체 이미지를 바이트 배열로 디코딩합니다.

동적 이미지

DynamicImage는 지원되는 모든 ImageBuffer<P> 유형을 열거합니다. 정확한 이미지 유형은 실행 중에 결정됩니다.

이미지를 열었을 때 반환되는 타입입니다. DynamicImage는 편의를 위해 모든 이미지 처리 기능을 다시 구현합니다.

RGBA 픽셀의 경우 DynamicImageGenericImageViewGenericImage 특성을 구현합니다.