sunu icon

Flameshot screenshot border

sunu | PRO | 07/19/21 03:31:54 PM UTC | 0 ⭐ | 1665 👁️ | Never ⏰ | []
Bash |

7.54 KB

|

None

|

0 👍

/

0 👎

#!/bin/bash
 
# =============================================
 
# https://bandithijo.github.io/blog/memodifikasi-screenshot-dari-flameshot-dengan-imagemagick
 
# https://github.com/berrabe/awesome-flameshot
 
# =============================================
 
 
#_SCREENSHOT_DIR_=$HOME
_SCREENSHOT_DIR_=/home/sunu/FlameshotBorder/savedPIC
#_LOG_FILE_="$_SCREENSHOT_DIR_/awesome-flameshot.log"
_LOG_FILE_="/home/sunu/FlameshotBorder/awesome-flameshot.log"
 
_FG_COLOR_='#000000'
#_BG_COLOR_='#ffffff'
_BG_COLOR_="none"
_BG_SIZE_=1
 
# Border Size Applied when value greater than or equal 3
_BORDER_SIZE_=3
_SHADOW_SIZE_='00x00+00+00'
_ROUNDED_CORNER_=1
 
#_AUTHOR_POST_=( 'South' '+0+26' )
#_AUTHOR_NAME_="  $USER  $(date '+    %d.%m.%y     %H:%M')"
#_AUTHOR_COLOR_='#000000'
 
_AUTHOR_POST_=( 'South' '+0+26' )
_AUTHOR_NAME_="  $USER  $(date '+    %d.%m.%y     %H:%M')"
_AUTHOR_COLOR_='#000000'
 
# Get Lists Font With "convert -list font | grep -iE 'font:.*' | nl"
_FONT_SIZE_=9
_FONT_='Helvetica'
 
# =============================================
 
# List of Colors
Light_Red="\033[1;31m"
Light_Green="\033[1;32m"
Yellow="\033[1;33m"
Light_Blue="\033[1;34m"
Light_Purple="\033[1;35m"
Light_Cyan="\033[1;36m"
NoColor="\033[0m"
 
 
trap ctrl_c INT
 
function ctrl_c() {
 
    echo -ne "  -- Exiting --  "
}
 
function check() {
 
    if [[ $? -eq 0 && ${PIPESTATUS[0]} -eq 0 ]]; then
        echo -e "${Light_Green} [ Success ] ${NoColor}"
    else
        echo -e "${Light_Red} [ Failed ] ${NoColor}"
 
        echo -e "\n\n${Light_Cyan} [+] SUMMARY |${Light_Red} FAILED ${NoColor}"
        _end_job_=$(date +%s)
        summary $_start_job_ $_end_job_ 'failed' && notify-send -u critical -t 3000 "[ ERROR ]  Awesome-Flameshot : $_LOG_FILE_" >> $_LOG_FILE_ 2>&1
        exit 1
    fi
}
 
function get_latest_img() { 
 
    _LATEST_IMAGE_=$(/bin/ls -th $_SCREENSHOT_DIR_ | grep -vE '.edited.png$' | grep -E '.png$' | head -n 1)
 
    if [[ $( echo "$_LATEST_IMAGE_" | wc -w ) -eq 0 ]]; then
        echo -e "${Light_Purple} [ No New Image Detected ] ${NoColor}"
        exit 1
    else
        echo -e "${Light_Green} [ Success ] ${Yellow} ($_LATEST_IMAGE_) ${NoColor}"
        _LATEST_IMAGE_="$_SCREENSHOT_DIR_/$_LATEST_IMAGE_"
    fi
}
 
function convert() {
 
    _target_file_=$( echo "$_LATEST_IMAGE_" | sed 's/.png/.edited.png/g'  )
 
    if [[ $_BORDER_SIZE_ -ge 3 ]]; then
        printf "%-50s" "**|--[+]*Generate*Image*Info*" | sed 's/ /./g' | sed 's/*/ /g'
        magick convert "$_LATEST_IMAGE_" \
            -format 'roundrectangle 1,1 %[fx:w+4],%[fx:h+4] '"$_ROUNDED_CORNER_"','"$_ROUNDED_CORNER_"''\
            info: > $_SCREENSHOT_DIR_/_rounded_.mvg
        check
 
        printf "%-50s" "**|--[+]*Generate*Rounded*Masking*" | sed 's/ /./g' | sed 's/*/ /g'
        magick convert "$_LATEST_IMAGE_" -border $_BORDER_SIZE_ -alpha transparent \
            -background none -fill white -stroke none -strokewidth 0 \
            -draw "@"$_SCREENSHOT_DIR_"/_rounded_.mvg" $_SCREENSHOT_DIR_/_rounded_mask_.png >> $_LOG_FILE_ 2>&1
        check
 
        printf "%-50s" "**|--[+]*Generate*Rounded*Overlay*" | sed 's/ /./g' | sed 's/*/ /g'
        magick convert "$_LATEST_IMAGE_" -border $_BORDER_SIZE_ -alpha transparent \
            -background none -fill none -stroke $_FG_COLOR_ -strokewidth $_BORDER_SIZE_ \
            -draw "@"$_SCREENSHOT_DIR_"/_rounded_.mvg" $_SCREENSHOT_DIR_/_rounded_overlay_.png >> $_LOG_FILE_ 2>&1
        check
 
        printf "%-50s" "**|--[+]*Set*Rounded*Corner*&*Border*Color*" | sed 's/ /./g' | sed 's/*/ /g'
        magick convert "$_LATEST_IMAGE_" -alpha set -bordercolor none -border $_BORDER_SIZE_  \
            $_SCREENSHOT_DIR_/_rounded_mask_.png -compose DstIn -composite \
            $_SCREENSHOT_DIR_/_rounded_overlay_.png -compose Over -composite \
            "$_target_file_" >> $_LOG_FILE_ 2>&1 && \
        rm -f $_SCREENSHOT_DIR_/_rounded_*
        check
    else
        printf "%-50s" "**|--[+]*Set*Rounded*Corner*" | sed 's/ /./g' | sed 's/*/ /g'
        magick convert "$_LATEST_IMAGE_" \( +clone  -alpha extract -draw 'fill black polygon 0,0 0,'"$_ROUNDED_CORNER_"' '"$_ROUNDED_CORNER_"',0 fill white circle '"$_ROUNDED_CORNER_"','"$_ROUNDED_CORNER_"' '"$_ROUNDED_CORNER_"',0' \
        \( +clone -flip \) -compose Multiply -composite \
        \( +clone -flop \) -compose Multiply -composite \
        \) -alpha off -compose CopyOpacity -composite -compose over "$_target_file_" >> $_LOG_FILE_ 2>&1
        check
    fi
 
    printf "%-50s" "**|--[+]*Set*Image*Shadow*" | sed 's/ /./g' | sed 's/*/ /g'
    magick convert "$_target_file_" \( +clone -background black -shadow $_SHADOW_SIZE_ \) +swap -background none -layers merge +repage "$_target_file_" >> $_LOG_FILE_ 2>&1 \
    && magick convert "$_target_file_" -bordercolor $_BG_COLOR_ -border $_BG_SIZE_ "$_target_file_" >> $_LOG_FILE_ 2>&1
    check
 
#    printf "%-50s" "**|--[+]*Set*Image*Author*" | sed 's/ /./g' | sed 's/*/ /g'
#    echo -en "  $_AUTHOR_NAME_  " | magick convert "$_target_file_" -gravity ${_AUTHOR_POST_[0]} -pointsize $_FONT_SIZE_ -fill $_AUTHOR_COLOR_ -undercolor $_FG_COLOR_ -font $_FONT_ -annotate ${_AUTHOR_POST_[1]} @- "$_target_file_" \
#    >> $_LOG_FILE_ 2>&1 && magick convert "$_target_file_" -gravity South -chop 0x$(( $_BG_SIZE_ / 2 )) "$_target_file_" >> $_LOG_FILE_ 2>&1
#    check
 
    printf "%-50s" "**|--[+]*Add*Top*/*North*BG*" | sed 's/ /./g' | sed 's/*/ /g'
    magick convert "$_target_file_" -gravity North -background $_BG_COLOR_ -splice 0x$(( $_BG_SIZE_ / 2 )) "$_target_file_" >> $_LOG_FILE_ 2>&1
    check
 
    printf "%-50s" "**|--[+]*Set*sRGB*Image*Profile*" | sed 's/ /./g' | sed 's/*/ /g'
    magick convert "$_target_file_" -profile /usr/share/color/icc/colord/sRGB.icc "$_target_file_" >> $_LOG_FILE_ 2>&1
    check
}
 
function summary() {
 
    _runtime_job_=$(($2-$1))
    hours=$((_runtime_job_ / 3600)); minutes=$(( (_runtime_job_ % 3600) / 60 )); seconds=$(( (_runtime_job_ % 3600) % 60 ))
 
    printf "%s %s\n" "  |--[+] Elapsed Time : " "$hours : $minutes : $seconds"
 
    if [[ $3 != "failed" ]]; then
        printf "%s %s" "  |--[+] Output File  : " "$_target_file_"
 
        xclip -selection clipboard -t image/png -i $_target_file_ >> $_LOG_FILE_ 2>&1 && notify-send -u normal -t 3000 "Awesome-Flameshot: $_target_file_ Copied" >> $_LOG_FILE_ 2>&1
        if [[ $? -eq 0 ]]; then
            echo -e "${Light_Green} (Copied to Clipboard) ${NoColor}"
        else
            echo -e "${Light_Red} (Copy to Clipboard Failed) ${NoColor}"
        fi
    fi
 
    _error_count_=$(cat $_LOG_FILE_ 2> /dev/null | wc -l)
    if [[ $_error_count_ -ge 1 ]]; then
        printf "%s ${Light_Red}%s  -->  $_LOG_FILE_ ${NoColor}\n\n" "  |--[+] Error Count  : " $_error_count_
    else
        printf "%s ${Light_Green}%s  -->  $_LOG_FILE_ ${NoColor}\n\n" "  |--[+] Error Count  : " $_error_count_
    fi
}
 
function main() {
 
    echo -e "\n\n\t\t\t${Light_Blue} AWESOME FLAMESHOT ${NoColor}\n"
    rm -f $_LOG_FILE_
    _start_job_=$(date +%s)
    echo -e "\n\n${Light_Cyan} [+] SCRENSHOTING ${NoColor}"
 
    printf "%-50s" "**|--[+]*Starting*Flameshot*" | sed 's/ /./g' | sed 's/*/ /g'
    flameshot gui --raw --delay 4000 > /dev/null 2>&1
    check
 
    printf "%-50s" "**|--[+]*Checking*Latest*Image*" | sed 's/ /./g' | sed 's/*/ /g'
    get_latest_img
 
    echo -e "\n\n${Light_Cyan} [+] CONVERTING ${NoColor}"
    convert
 
    echo -e "\n\n${Light_Cyan} [+] SUMMARY ${NoColor}"
    _end_job_=$(date +%s)
    summary $_start_job_ $_end_job_
}
 
clear
main

Comments