#!/usr/bin/env python3
################################################
# 2016-2020 by Paul Sherman <psherman2001@gmail.com> 
# last updated Sunday, 07/24/2022						        
# This program is free software; you can redistribute it and/or			
# modify it under the terms of the GNU General Public License			
# as published by the Free Software Foundation; either version 3		
# 										
# This program is distributed in the hope that it will be useful,		
# but WITHOUT ANY WARRANTY; without even the implied warranty of		
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the			
# GNU General Public License for more details.					
#										
# You should have received a copy of the GNU General Public License		
# along with this program; if not, write to the Free Software			
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.   
################################################
import tkinter.filedialog as filedialog
from tkinter import *
import tkinter.messagebox
import os, imghdr, re, subprocess, base64, sys
from PIL import ImageTk, Image

APP_ICON = """
R0lGODlhIAAgAIQZAAAAgAAAqgAAvzMzmTMzzABmMzNmMzNmZjNmmTNmzGZmzACZAACZM2aZmWaZ
zADMAGaZ/2bM/5nMzJnM/8zMmczMzMz/mf//Zv//mf///////////////////////////yH5BAEK
AB8ALAAAAAAgACAAAAX+4CeOZGmeaEoGqhm8cPyOgdCOAKHsfM+OA8BPNXBMjsikkjAY2IjGo0Si
VCaawaGpOJFcvhdqdeLABp9bIwb8HR/NTcCJy/6KkZA8Ey4s0et4CXtwZgBoH1wUbBZHZYSPTWhc
ExVrFEcQkJqSUUoRg5qFJJNKCqGEcqOdSaBNrVipqlWZWAkQEUdXcFoipEimAwSrE60Kc8PEwRBK
tFgKE8fMylWOTc/QW9e/vtvWSHPaRwQJRwcHrN7f2UkQBI0LCw1ITMMQvAPhDssTBw8PBVEI7EuS
4N41I/scLPD34FwVeRMK+nnWoECSfgwXGFlVAEFEgxEKNHzH0B8DBAU+HPYrEEHiKAUYHxg4YKBk
xgcaQ/o7QOAegoU2g5ZMmXHAvZhCkwL1Z7QEgFNQm/D6IKCq1atYs1qdeqOriRAAOw==
"""

top = Tk()

icondata= base64.b64decode(APP_ICON)
tempFile= "/tmp/icon.gif"
iconfile= open(tempFile,"wb")
iconfile.write(icondata)
iconfile.close()
try:
	img = PhotoImage(file='/tmp/icon.gif')
	top.tk.call('wm', 'iconphoto', top._w, img)
except:
	pass
os.remove(tempFile)

# this section bails from program if something is amiss ---------------------------------------------
# first, we check if the cwebp program is present:
f = subprocess.getoutput('type -path cwebp')
if not f:
	top.withdraw()
	tkinter.messagebox.showinfo("Error", "libwebp needs to be installed to use this utility")
	sys.exit(0)
	
	
# if we are not passed a filename, pop up a file open dialog
if len(sys.argv) < 2:
	file_name = filedialog.askopenfilename(title='Select a JPEG file', filetypes=[('JPEG files', '.jpg')])
	if not file_name:	
		sys.exit(0)
else:
	file_name = ' '.join(sys.argv[1:])
	if not os.path.isfile(file_name):
		top.withdraw()
		tkinter.messagebox.showinfo("Error", "This script is meant to be passed a single JPEG file")
		sys.exit(0)


# if the file name passed does not exist
if not os.path.isfile(file_name):
	top.withdraw()
	tkinter.messagebox.showinfo("Error", "This script is meant to be passed a JPEG file")
	sys.exit(0)
		
# if the filename passed is not a jpg
x = imghdr.what(file_name)
if not x == 'jpeg':
	top.withdraw()
	tkinter.messagebox.showinfo("Error", "file_name does not appear to be a valid JPEG image")
	sys.exit(0)
	
#----------------------------------------------------------------------------------------------------------------

pattern = re.compile(".jpg", re.IGNORECASE)
newname = pattern.sub(".webp", file_name)
if newname == file_name:
	pattern = re.compile(".jpeg", re.IGNORECASE)
	newname = pattern.sub(".webp", file_name)
print (newname)

def convert_it(ev=None):
	#os.system('cwebp -quiet -preset %s -q %d %s -o %s' % (var1.get(), scale.get(), file_name, newname))
	subprocess.call(['cwebp', '-quiet', '-preset', var1.get(), '-q', str(scale.get()), file_name, '-o', newname])
	sys.exit(0)

top.title("JPG-2-WEBP")
#img = Image.open(file_name)
#img = img.resize((260, 210), Image.ANTIALIAS)

#convert -resize 260x210 "input.png" "output.png"
subprocess.call(['gm', 'convert', '-resize', '260x210', '-strip', file_name, '/tmp/88.jpg'])
img = Image.open("/tmp/88.jpg")
tk_img = ImageTk.PhotoImage(img)
os.remove("/tmp/88.jpg")
imagepanel=Label(top,image = tk_img)
imagepanel.grid(row =0, column=0,rowspan=1,columnspan=2, padx=2,pady=10)

label = Label(top, text='Image Type', font='Sans -12 bold')
label.grid(row =1, column=0, padx=2,pady=10)
var1 = StringVar(top)
var1.set('default')
choices = ['default', 'picture', 'photo', 'drawing','icon', 'text']
option = OptionMenu(top, var1, *choices)
option.config(width=14)
option.grid(row =1, column=1, padx=2,pady=10)

label1 = Label(top, text='Output Quality', font='Sans -12 bold',width=16)
label1.grid(row =2, column=0, padx=2,pady=10)

scale = Scale(top, from_=10, to=100,  orient=HORIZONTAL,resolution=5,tickinterval=40,sliderlength=15,length=180)
scale.config(width=20)
scale.set(90)
scale.grid(row =2, column=1, padx=2,pady=10)

quit = Button(top, text='Never Mind', command=top.quit, activeforeground='white', activebackground='red',width=14)
quit.grid(row =3, column=0, padx=16,pady=10)
commit = Button(top, text='Convert', command=convert_it, activeforeground='white', activebackground='green',width=16)
commit.grid(row =3, column=1, padx=2,pady=10)

mainloop()
