diff --git a/stpkg b/stpkg index fc386923ce2662ff4fd55cefd2a998c394ffa543..703373bedb21cbdee4c2843b899684d3bffd7f97 100755 --- a/stpkg +++ b/stpkg @@ -550,14 +550,11 @@ __list() { done } -# Usage: process_sticker_file <filename> <&JSON> -process_sticker_file() { - FILE="$1" - local -n JSON_REF="$2" - - # Get sizes - local INIT_WIDTH=$(file_get_width "$FILE") - local INIT_HEIGHT=$(file_get_height "$FILE") +__get_dest_dimensions() { + local INIT_WIDTH=$1 + local INIT_HEIGHT=$2 + local MAX_WIDTH=$3 + local MAX_HEIGHT=$3 local WIDTH_RATIO="$(echo "scale=10; $INIT_WIDTH/$STPKG_MAX_WIDTH" | bc)" local HEIGHT_RATIO="$(echo "scale=10; $INIT_HEIGHT/$STPKG_MAX_HEIGHT" | bc)" @@ -578,6 +575,14 @@ process_sticker_file() { local DEST_WIDTH=$INIT_WIDTH fi + echo "${DEST_WIDTH}x${DEST_HEIGHT}" +} + +# Usage: process_sticker_file <filename> <&JSON> +process_sticker_file() { + FILE="$1" + local -n JSON_REF="$2" + # Get the names and extensions local INIT_TYPE=$(file_get_type "$FILE") local INIT_EXT=$(file_get_ext_from_type "$INIT_TYPE") @@ -606,13 +611,20 @@ process_sticker_file() { local DEST_TYPE=$STPKG_ANIMATED_TARGET_FILETYPE local DEST_EXT=$(file_get_ext_from_type "$DEST_TYPE") - convert "${FILE}" -coalesce -background none -trim -layers TrimBounds "$DEST_EXT:${TEMP}" 1>&2 \ + local backgroundColor="`convert "${FILE}[0]" -format "%[pixel:u.p{0,0}]" info:`" + convert "${FILE}" -dispose previous -background "${backgroundColor}" -trim -layers TrimBounds -coalesce "$DEST_EXT:${TEMP}" 1>&2 \ || die "$NAME failed trimming the sticker" - convert "${TEMP}" -coalesce -dispose Background -resize ${DEST_WIDTH}x${DEST_HEIGHT} "$DEST_EXT:${TEMP}" 1>&2 \ + + # Get sizes + local INIT_WIDTH=$(file_get_width "${TEMP}") + local INIT_HEIGHT=$(file_get_height "${TEMP}") + local DEST_DIMENSIONS=$(__get_dest_dimensions $INIT_WIDTH $INIT_HEIGHT $STPKG_MAX_WIDTH $STPKG_MAX_HEIGHT) + + convert "${TEMP}" -coalesce -dispose previous -resize ${DEST_DIMENSIONS} "$DEST_EXT:${TEMP}" 1>&2 \ || die "$NAME failed resizing the sticker" - #convert "${TEMP}" -coalesce -layers OptimizePlus -layers RemoveDups -layers OptimizeTransparency "$DEST_EXT:${TEMP}" 1>&2 \ - convert "${TEMP}" -coalesce -layers Optimize "$DEST_EXT:${TEMP}" 1>&2 \ - || die "$NAME failed optimizing the sticker" + + # Can't optimize the gif because discord doesn't know how to display them properly (for bridged channels) + #convert "${TEMP}" -coalesce -layers Optimize "$DEST_EXT:${TEMP}" 1>&2 \ else # @@ -621,13 +633,18 @@ process_sticker_file() { local DEST_TYPE=$STPKG_IMAGE_TARGET_FILETYPE local DEST_EXT=$(file_get_ext_from_type "$DEST_TYPE") - convert "$FILE" -bordercolor none -border 1 -background none -gravity center -trim +repage -resize ${DEST_WIDTH}x${DEST_HEIGHT} "${DEST_EXT}:${TEMP}" 1>&2 \ + # Get sizes + local INIT_WIDTH=$(file_get_width "$FILE") + local INIT_HEIGHT=$(file_get_height "$FILE") + local DEST_DIMENSIONS=$(__get_dest_dimensions $INIT_WIDTH $INIT_HEIGHT $STPKG_MAX_WIDTH $STPKG_MAX_HEIGHT) + + convert "$FILE" -bordercolor none -border 1 -background none -gravity center -trim +repage -resize ${DEST_DIMENSIONS} "${DEST_EXT}:${TEMP}" 1>&2 \ || die "$NAME failed converting the sticker" fi fi - # TODO: correctly get max width/height for animated + # Get real final dimensions for json DEST_WIDTH=$(file_get_width "$TEMP") DEST_HEIGHT=$(file_get_height "$TEMP")