From e89f654559793e5e4fabf657fe87656f581f7494 Mon Sep 17 00:00:00 2001 From: Sebastian Krzyszkowiak Date: Thu, 24 Jan 2019 23:57:23 +0100 Subject: [PATCH] ImgToWebp: add ability to use lossless compression Good for pixel art --- cmake/ImgToWebp.cmake | 11 ++++++++--- cmake/libsuperderpy.cmake | 9 +++++++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/cmake/ImgToWebp.cmake b/cmake/ImgToWebp.cmake index 052746c..289043e 100644 --- a/cmake/ImgToWebp.cmake +++ b/cmake/ImgToWebp.cmake @@ -14,20 +14,25 @@ if(CONVERT) else() set(resizecmd "") endif() - GetFromAssetCache(${CACHE} ${DATADIR}/${file} "${QUALITY}-${RESIZE}-${PARAMS}" CACHED HASH) + if (LOSSLESS) + set(losslesscmd -define webp:lossless=true) + else() + set(losslesscmd "") + endif() + GetFromAssetCache(${CACHE} ${DATADIR}/${file} "${LOSSLESS}-${QUALITY}-${RESIZE}-${PARAMS}" CACHED HASH) if (CACHED) file(REMOVE ${DATADIR}/${file}) configure_file(${CACHED} ${DATADIR}/${filepath}.wbp COPYONLY) unset(CACHED) else() separate_arguments(PARAMS) - set(CONVERT_CMD ${CONVERT} ${file} -quality ${QUALITY} ${PARAMS} ${resizecmd} webp:${filepath}.wbp) + set(CONVERT_CMD ${CONVERT} ${file} -quality ${QUALITY} ${PARAMS} ${resizecmd} ${losslesscmd} webp:${filepath}.wbp) execute_process(COMMAND ${CONVERT_CMD} WORKING_DIRECTORY ${DATADIR} RESULT_VARIABLE CONVERT_RESULT) if(CONVERT_RESULT) message(WARNING "ERROR: ${CONVERT_RESULT}") else() file(REMOVE ${DATADIR}/${file}) - AddToAssetCache(${CACHE} ${HASH} "${QUALITY}-${RESIZE}-${PARAMS}" "${DATADIR}/${filepath}.wbp") + AddToAssetCache(${CACHE} ${HASH} "${LOSSLESS}-${QUALITY}-${RESIZE}-${PARAMS}" "${DATADIR}/${filepath}.wbp") endif() endif() endif() diff --git a/cmake/libsuperderpy.cmake b/cmake/libsuperderpy.cmake index 19b2b04..0464d4b 100644 --- a/cmake/libsuperderpy.cmake +++ b/cmake/libsuperderpy.cmake @@ -330,13 +330,18 @@ if (NOT LIBSUPERDERPY_CONFIG_INCLUDED) COMMAND ${CMAKE_COMMAND} -DDATADIR=${ASSET_PIPELINE_DATADIR} -DCACHE="${CMAKE_SOURCE_DIR}/.assetcache" -DBITRATE=${FLACTOOPUS_BITRATE} -P ${LIBSUPERDERPY_DIR}/cmake/FlacToOpus.cmake USES_TERMINAL) - set(IMGTOWEBP_QUALITY "75" CACHE STRING "Quality of resulting WebP files") + option(IMGTOWEBP_LOSSLESS "Use lossless WebP compression" OFF) + if(IMGTOWEBP_LOSSLESS) + set(IMGTOWEBP_QUALITY "100" CACHE STRING "Quality of resulting WebP files") + else(IMGTOWEBP_LOSSLESS) + set(IMGTOWEBP_QUALITY "75" CACHE STRING "Quality of resulting WebP files") + endif(IMGTOWEBP_LOSSLESS) set(IMGTOWEBP_RESIZE "" CACHE STRING "Value passed as -resize to ImageMagick (no resizing when empty)") set(IMGTOWEBP_PARAMS "" CACHE STRING "Additional ImageMagick parameters") add_custom_target(${LIBSUPERDERPY_GAMENAME}_img_to_webp DEPENDS ${ASSET_PIPELINE_DEPEND} - COMMAND ${CMAKE_COMMAND} -DQUALITY="${IMGTOWEBP_QUALITY}" -DRESIZE="${IMGTOWEBP_RESIZE}" -DPARAMS="${IMGTOWEBP_PARAMS}" -DCACHE="${CMAKE_SOURCE_DIR}/.assetcache" -DDATADIR=${ASSET_PIPELINE_DATADIR} -P ${LIBSUPERDERPY_DIR}/cmake/ImgToWebp.cmake + COMMAND ${CMAKE_COMMAND} -DQUALITY="${IMGTOWEBP_QUALITY}" -DRESIZE="${IMGTOWEBP_RESIZE}" -DPARAMS="${IMGTOWEBP_PARAMS}" -DCACHE="${CMAKE_SOURCE_DIR}/.assetcache" -DLOSSLESS="${IMGTOWEBP_LOSSLESS}" -DDATADIR=${ASSET_PIPELINE_DATADIR} -P ${LIBSUPERDERPY_DIR}/cmake/ImgToWebp.cmake USES_TERMINAL) endif(ANDROID OR EMSCRIPTEN)