Seize the day

POST : Android Dev Study

페이스북 이미지 인코딩 라이브러리 - 스펙트럼

https://libspectrum.io/docs/getting_started_android

https://github.com/facebookincubator/spectrum

PNG, GIF, JPG, WEP, HEIF 인코딩/디코딩/트랜스코딩을 지원한다고 해서 관심이 가진다. 아직 구현단계라서 안 되는 기능이 많다. 


package com.mdiwebma.screenshot.utils

import android.graphics.Bitmap
import android.util.Log
import com.facebook.spectrum.EncodedImageSink
import com.facebook.spectrum.Spectrum
import com.facebook.spectrum.SpectrumSoLoader
import com.facebook.spectrum.image.EncodedImageFormat
import com.facebook.spectrum.logging.SpectrumLogcatLogger
import com.facebook.spectrum.options.EncodeOptions
import com.facebook.spectrum.plugins.SpectrumPluginWebp
import com.facebook.spectrum.requirements.EncodeRequirement
import com.mdiwebma.base.ApplicationKeeper
import java.io.FileOutputStream

object SpectrumHelper {

init {
SpectrumSoLoader.init(ApplicationKeeper.get())
}

private val spectrum = Spectrum.make(
SpectrumLogcatLogger(Log.INFO),
arrayOf(SpectrumPluginWebp())
//DefaultPlugins.get()
)

// if (width > 16383 || height > 16383) saveToWebp() throw SpectrumException
// https://developers.google.com/speed/webp/faq#what_is_the_maximum_size_a_webp_image_can_be
// namespace webp {
//
// static constexpr std::uint32_t maximumSizeDimension = 16383;
// void ICompressor::enforceSizeBelowMaximumSideDimension(
// const image::Size& size,
// const std::uint32_t maximumSideDimensions) {
// SPECTRUM_ERROR_IF(
// size.width > maximumSideDimensions || size.height > maximumSideDimensions,
// error::CompressorInputSizeTooLarge);
// }
fun saveToWebp(bitmap: Bitmap, quality: Int, outputStream: FileOutputStream): Boolean {
val encodeRequirement = EncodeRequirement(
EncodedImageFormat.WEBP,
quality,
EncodeRequirement.Mode.LOSSY
)

val encodeOption = EncodeOptions.Builder(encodeRequirement).build()
val result = spectrum.encode(
bitmap,
EncodedImageSink.from(outputStream),
encodeOption,
null
)
return result.isSuccessful
}

fun saveToWebpLossless(bitmap: Bitmap, outputStream: FileOutputStream): Boolean {
val encodeRequirement = EncodeRequirement(
EncodedImageFormat.WEBP,
EncodeRequirement.Mode.LOSSLESS
)

val encodeOption = EncodeOptions.Builder(encodeRequirement).build()
val result = spectrum.encode(
bitmap,
EncodedImageSink.from(outputStream),
encodeOption,
null
)
return result.isSuccessful
}

fun saveToPng(bitmap: Bitmap, outputStream: FileOutputStream): Boolean {
val encodeRequirement = EncodeRequirement(
EncodedImageFormat.PNG,
EncodeRequirement.Mode.LOSSLESS
)

val encodeOption = EncodeOptions.Builder(encodeRequirement).build()
val result = spectrum.encode(
bitmap,
EncodedImageSink.from(outputStream),
encodeOption,
null
)
return result.isSuccessful
}

fun saveToJpeg(bitmap: Bitmap, quality: Int, outputStream: FileOutputStream): Boolean {
val encodeRequirement = EncodeRequirement(
EncodedImageFormat.JPEG,
quality,
EncodeRequirement.Mode.LOSSY
)

val encodeOption = EncodeOptions.Builder(encodeRequirement).build()
val result = spectrum.encode(
bitmap,
EncodedImageSink.from(outputStream),
encodeOption,
null
)
return result.isSuccessful
}
}


top

posted at

2019. 1. 13. 10:27


CONTENTS

Seize the day
BLOG main image
김대정의 앱 개발 노트와 사는 이야기
RSS 2.0Tattertools
공지
아카이브
최근 글 최근 댓글
카테고리 태그 구름사이트 링크