121 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| # Build instructions:
 | |
| #  https://medium.com/@eplt/5-minutes-to-install-imagemagick-with-heic-support-on-ubuntu-18-04-digitalocean-fe2d09dcef1
 | |
| # Command:
 | |
| #  https://zwbetz.com/convert-heic-images-to-jpg/
 | |
| 
 | |
| red="$(tput setaf 1)"
 | |
| rst="$(tput sgr0)"
 | |
| 
 | |
| # trap ctrl-c and call ctrl_c()
 | |
| # https://rimuhosting.com/knowledgebase/linux/misc/trapping-ctrl-c-in-bash
 | |
| trap ctrl_c INT
 | |
| function ctrl_c() {
 | |
|  if [ $filecount -eq 0 ]; then printf "%s\n" "${rst}${red}exiting${rst}"
 | |
|  else printf "\n%s\n%s\n\n" "${rst}${red}CTRL+C detected - this may have corrupted the most recent attempted file" "conversion. Please inspect the latest file and delete or retry as needed.${rst}"
 | |
|  fi
 | |
|  exit
 | |
| }
 | |
| 
 | |
| padding="  "
 | |
| 
 | |
| if [[ "${@}" == *"-h"* ]]; then
 | |
|  printf "%s\n" "Command:"
 | |
|  printf "$padding%s\n" "Converts heic files (Apple's native picture format) to either jpg (default)"
 | |
|  printf "$padding%s\n" "or png (larger file size) for easier manipulation or sharing. Requires that"
 | |
|  printf "$padding%s\n" "Imagemagick's mogrify tool be complied and installed with heic support. See"
 | |
|  printf "$padding%s\n" "step 1 at https://dismy.link/heicmogrify for a brief install guide."
 | |
|  printf "%s\n" "Command usage:"
 | |
|  printf "$padding%-20s%s\n" "--dir [directory]" "Specify a directory other than current"
 | |
|  printf "$padding%-20s%s\n" "-d --delete" "Delete original files (default keeps originals)"
 | |
|  printf "$padding%-20s%s\n" "-q --quiet" "Suppresses progress output (summaries are still displayed)"
 | |
|  printf "$padding%-20s%s\n" "[--png|--jpg]" "Save as jpg/png (default is jpg)"
 | |
|  printf "$padding%-20s%s\n" "-h --help" "Print this help message and exit"
 | |
|  exit 0
 | |
| fi
 | |
| 
 | |
| # DEFAULTS
 | |
| # The folder with the files you want to convert
 | |
| directory="`pwd`"
 | |
| # Set to 0 to delete the original .heic files after they are converted
 | |
| keeporiginals=1
 | |
| # Set to 0 for PNG (much larger file size)
 | |
| saveasjpg=1
 | |
| # Suppress progress output
 | |
| keepquiet=0
 | |
| 
 | |
| filecount=0
 | |
| customdir=0
 | |
| for _arg in ${@}; do
 | |
|  if [ $customdir -eq 1 ]; then directory="$_arg"; customdir=2; continue; fi
 | |
|  if [ "$_arg" == "--dir" ]; then customdir=1; continue; fi
 | |
|  if [ "$_arg" == "-d" ]; then keeporiginals=0; continue; fi
 | |
|  if [ "$_arg" == "--delete" ]; then keeporiginals=0; continue; fi
 | |
|  if [ "$_arg" == "-q" ]; then keepquiet=1; continue; fi
 | |
|  if [ "$_arg" == "--quiet" ]; then keepquiet=1; continue; fi
 | |
|  if [ "$_arg" == "--png" ]; then saveasjpg=0; continue; fi
 | |
|  if [ "$_arg" == "--jpg" ]; then saveasjpg=1; continue; fi
 | |
| done
 | |
| 
 | |
| # Make sure the mogrify command is available. If this is being
 | |
| #  run as a cron job the which command will fail so we check the
 | |
| #  default location just in case.
 | |
| mymogrify=`which mogrify`
 | |
| which mogrify > /dev/null
 | |
| if [[ $? -eq 1 ]]; then
 | |
|  if [[ -e "/usr/local/bin/mogrify" ]]; then
 | |
|   mymogrify="/usr/local/bin/mogrify"
 | |
|  else
 | |
|   printf "%s\n" "Unable to locate the mogrify command. Please follow the build and"
 | |
|   printf "%s\n" "installation guide at https://dismy.link/heicmogrify to install"
 | |
|   printf "%s\n" "the ImageMagick mogfify tool on your system with heic support."
 | |
|   exit 1
 | |
|  fi
 | |
| fi
 | |
| 
 | |
| # summary:
 | |
| printf "\n%s\n" "Summary:"
 | |
| printf "$padding%s\n" "Binary:    $mymogrify"
 | |
| printf "$padding%s\n" "Directory: $directory"
 | |
| [ $keeporiginals -eq 0 ] && printf "$padding%s\n" "Originals: Delete" || printf "$padding%s\n" "Originals: Keep"
 | |
| [ $keepquiet -eq 0 ] && printf "$padding%s\n" "Output:    Visible" || printf "$padding%s\n" "Output:    Hidden"
 | |
| [ $saveasjpg -eq 0 ] && printf "$padding%s\n" "Save as:   PNG" || printf "$padding%s\n" "Save as:   JPG"
 | |
| printf "\n%s" "Press enter to begin or ^c to exit"
 | |
| read
 | |
| 
 | |
| [ $saveasjpg -eq 0 ] && destformat="png" || destformat="jpg"
 | |
| # Loop over all the .heic files in the folder
 | |
| for heic in *.heic; do
 | |
|  # Drop the .heic extension and append .jpg instead
 | |
|  img=`echo "$heic" | rev | cut -d. -f2- | rev`.$destformat
 | |
|  if [ -f "$img" ]; then [ $keepquiet -eq 0 ] && printf "%s\n" "Skipping $heic ($img exists)"
 | |
|  else [ $keepquiet -eq 0 ] && printf "%s\n" "Converting $heic to $img"; fi
 | |
|  [ -f "$img" ] || let filecount=filecount+1
 | |
|  # If the file we are going to make does not exist, run the command to convert it
 | |
|  if [ ! -f "$img" ]; then
 | |
|   $mymogrify -format $destformat "$heic"
 | |
|   mogrified=$?
 | |
|   if [ $mogrified -ne 0 ]; then
 | |
|    printf "\n%s\n\n" "${rst}${red}Encountered the above error while trying to mogrify. Exiting.${rst}"
 | |
|    exit $mogrified
 | |
|   fi
 | |
|  fi
 | |
|  # If we don't want the originals, give them the axe
 | |
|  [ $keeporiginals -eq 0 ] && rm "$heic"
 | |
| done
 | |
| 
 | |
| if [ $filecount -gt 0 ]; then
 | |
|  if [ $filecount -eq 1 ]; then
 | |
|   printf "\n%s\n\n" "Script complete. Converted $filecount heic file to $destformat"
 | |
|  else
 | |
|   printf "\n%s\n\n" "Script complete. Converted $filecount heic files to $destformat"
 | |
|  fi
 | |
| else
 | |
|  if [ $customdir -eq 2 ]; then
 | |
|   printf "\n%s\n\n" "Found 0 heic files to convert. Are you sure you specified the right directory?"
 | |
|  else
 | |
|   printf "\n%s\n\n" "Found 0 heic files to convert. Are you sure you're in the right directory?"
 | |
|  fi
 | |
| fi
 |