Skip to content

Commit

Permalink
[ADD] 확장자 선택 기능 삽입
Browse files Browse the repository at this point in the history
  • Loading branch information
C4NU committed Sep 6, 2023
1 parent ee228ce commit a9c872a
Show file tree
Hide file tree
Showing 3 changed files with 124 additions and 52 deletions.
59 changes: 55 additions & 4 deletions WebPConverterGUI.ui
Original file line number Diff line number Diff line change
Expand Up @@ -185,12 +185,25 @@
<rect>
<x>10</x>
<y>30</y>
<width>91</width>
<width>121</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>White Font</string>
<string>Enable Watermark</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton">
<property name="geometry">
<rect>
<x>350</x>
<y>30</y>
<width>75</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>Options..</string>
</property>
</widget>
</widget>
Expand Down Expand Up @@ -224,12 +237,50 @@
<rect>
<x>10</x>
<y>30</y>
<width>91</width>
<width>151</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>Enabled</string>
<string>Enabled Exif Padding</string>
</property>
</widget>
<widget class="QComboBox" name="SaveFormatBox">
<property name="geometry">
<rect>
<x>350</x>
<y>30</y>
<width>76</width>
<height>22</height>
</rect>
</property>
<item>
<property name="text">
<string>JPG</string>
</property>
</item>
<item>
<property name="text">
<string>PNG</string>
</property>
</item>
<item>
<property name="text">
<string>WebP</string>
</property>
</item>
</widget>
<widget class="QLabel" name="SaveFormatLabel">
<property name="geometry">
<rect>
<x>270</x>
<y>30</y>
<width>81</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>File Format</string>
</property>
</widget>
</widget>
Expand Down
71 changes: 35 additions & 36 deletions WebP_module.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,34 +11,23 @@ def __init__(self) -> None:
#self.watermark = Watermark_module.Watermark()
self.exif = Exif_module.Exif()

def ConvertImage(self, filePath, savePath, saveName, loselessOpt, imageQualityOpt, exifOpt, iccProfileOpt, exactOpt, watermarkText, exifViewOpt, conversionOpt):
# 확장자명 탐색
def ConvertImageToWebP(self, filePath, savePath, saveName, loselessOpt, imageQualityOpt, exifOpt, iccProfileOpt, exactOpt, watermarkText, exifViewOpt, conversionOpt):
condition, fileFormat = self.SearchFileFormat(filePath)

if(condition):
image = Image.open(filePath)

if exifViewOpt == True:
longerLength = image.width if image.width >= image.height else image.height
padding = int(longerLength / 10)

modelData, exifData = self.exif.GetExifData(image)
image = self.exif.SetImagePadding2(image, top=int(padding/2), side=int(padding/2), bottom=padding, color=(255,255,255))
image = self.exif.SetImageText(image, modelData=modelData, exifData=exifData, length = padding)
# jpg, jpeg, png, tiff 등 지원하는 파일 형식일 때

if condition:
# 01 일반 WebP 형식 Image로 변환할 때
if conversionOpt == True:
imageData = Image.open(filePath).convert('RGB')
image = Image.open(filePath).convert('RGB')

filePath = filePath.replace(fileFormat, '.webp')
dest = savePath+saveName+".webp"

exifData = getattr(imageData.info, 'exif', None)
exifData = getattr(image.info, 'exif', None)
if not exifData:
print(f'no exif data {saveName}')
exifOpt = False

iccProfile = imageData.info['icc_profile']
iccProfile = image.info['icc_profile']

#image = self.watermark.InsertWatermark(image=image, fontColor=watermarkColor, watermarkText=watermarkText)

Expand All @@ -53,29 +42,39 @@ def ConvertImage(self, filePath, savePath, saveName, loselessOpt, imageQualityOp
image.save(dest, format="webp", loseless=loselessOpt, quality=imageQualityOpt, exact=exactOpt, icc_profile=iccProfile)
else:
image.save(dest, format="webp", loseless=loselessOpt, quality=imageQualityOpt, exact=exactOpt)
else:
# webp 변환 말고 확장자 그대로
imageData = Image.open(filePath).convert('RGB')

filePath = filePath.replace(fileFormat, '.png')
dest = savePath+saveName+".png"
exifData = imageData.info['exif']
iccProfile = imageData.info['icc_profile']

#image = self.watermark.InsertWatermark(image=image, fontColor=watermarkColor, watermarkText=watermarkText)
def ConvertExifImage(self, filePath, savePath, saveName, fileFormatOpt):
condition, fileFormat = self.SearchFileFormat(filePath)

if exifOpt == True:
if iccProfileOpt == True:
image.save(dest, format="png", loseless=loselessOpt, quality=imageQualityOpt, exif=exifData, exact = exactOpt, icc_profile=iccProfile)
else:
image.save(dest, format="png", loseless=loselessOpt, quality=imageQualityOpt, exif=exifData, exact = exactOpt)
if condition:
# 02 EXIF Padding Image로 변환할 때
image = Image.open(filePath)

else:
if iccProfileOpt == True:
image.save(dest, format="png", loseless=loselessOpt, quality=imageQualityOpt, exact=exactOpt, icc_profile=iccProfile)
else:
image.save(dest, format="png", loseless=loselessOpt, quality=imageQualityOpt, exact=exactOpt)
longerLength = image.width if image.width >= image.height else image.height
padding = int(longerLength / 10)

modelData, exifData = self.exif.GetExifData(image)

image = self.exif.SetImagePadding2(image, top=int(padding/2), side=int(padding/2), bottom=padding, color=(255,255,255))
image = self.exif.SetImageText(image, modelData=modelData, exifData=exifData, length = padding)

# 파일 형식 선택
if fileFormatOpt == 0:
dest = savePath+saveName+'.jpeg'
image.save(dest, format='jpeg')
elif fileFormatOpt == 1:
dest = savePath+saveName+'.png'
image.save(dest, format='png')
elif fileFormatOpt == 2:
dest = savePath+saveName+'.webp'
image.save(dest, format='webp')
else:
print("잘못된 파일 형식 입니다.")
return

else:
print("잘못된 파일 형식 입니다.")
return

def SearchFileFormat(self, filePath):
fileFormat = os.path.splitext(filePath)[1]
Expand Down
46 changes: 34 additions & 12 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,19 @@ def __init__(self) :
super().__init__()
self.converter = webp.Converter()
self.fileName = []
self.loselessOpt = True
self.imageQualityOpt = 120
self.exifOpt = True

self.loselessOpt = False
self.imageQualityOpt = 80
self.exifOpt = False
self.iccProfileOpt = False
self.exactOpt = False
self.conversionOption = True # webp 변환하는지 선택

self.conversionOption = False # webp 변환하는지 선택

# Exif Options 관련 변수
self.exifPaddingOpt = False # Exif Padding 을 enable 할 지에 대한 변수
self.saveFormatIndex = 0 # JPG, PNG, WebP 파일 형식중 고른 값에 대한 변수

#self.watermark = []

self.setupUi(self)
Expand All @@ -60,6 +67,7 @@ def __init__(self) :

# ExifView 옵션
self.EnableExifPadding.stateChanged.connect(self.ExifPaddingOption)
self.SaveFormatBox.currentIndexChanged.connect(self.ExifSaveFormatOption)
self.InitOptions()

#################### PyQt5 FUNCTIONS
Expand All @@ -77,6 +85,7 @@ def InitOptions(self):
#self.watermarkFontColor = self.watermarkFontColorBox.isChecked()
#################### 하단 EXIF 삽입 관련 옵션
self.exifPaddingOpt = self.EnableExifPadding.isChecked()
self.saveFormatIndex = self.SaveFormatBox.currentIndex()

def dragEnterEvent(self, event):
if event.mimeData().hasUrls():
Expand Down Expand Up @@ -138,21 +147,30 @@ def SaveFile(self):
if savePath[0]:
strSavePath = savePath[0]
strSavePath = strSavePath[:strSavePath.rfind("/")]

# 01 WebP 이미지로만 변환할 때
if self.conversionOption == True:
for index in range(self.listWidget.count()):
self.converter.ConvertImageToWebP(self.listWidget.item(index).text(), strSavePath+'/',
self.fileName[index], self.loselessOpt, self.imageQualityOpt, exifOpt=self.exifOpt, iccProfileOpt=self.iccProfileOpt, exactOpt=self.exactOpt, watermarkText="", exifViewOpt=self.exifPaddingOpt,
conversionOpt = self.conversionOption)

# 02 Exif Padding 이미지로만 변환할때
elif self.exifPaddingOpt == True:
for index in range(self.listWidget.count()):
self.converter.ConvertExifImage(filePath=self.listWidget.item(index).text(), savePath=strSavePath+'/',
saveName=self.fileName[index], fileFormatOpt=self.saveFormatIndex)

else:
print("옵션 선택 에러 / 다시 선택해주세요")

#self.watermark#
for index in range(self.listWidget.count()):
self.converter.ConvertImage(self.listWidget.item(index).text(), strSavePath+'/',
self.fileName[index], self.loselessOpt, self.imageQualityOpt, exifOpt=self.exifOpt, iccProfileOpt=self.iccProfileOpt, exactOpt=self.exactOpt, watermarkText="", exifViewOpt=self.exifPaddingOpt,
conversionOpt = self.conversionOption)

if(platform.system() == "Windows"): #Windows
os.startfile(strSavePath)
elif(platform.system() == "Darwin"): #macOS
os.system("open "+'"'+strSavePath+'"')

self.listWidget.clear()
self.fileName.clear()

else:
return

Expand All @@ -176,7 +194,7 @@ def LoselessOption(self, state):
self.loselessOpt = False

def ImageQualityOption(self):
self.imageQualityOpt = self.imageQualityOpt = self.ImageQualityBox.value()
self.imageQualityOpt = self.ImageQualityBox.value()

def ExifOption(self, state):
if state == Qt.Checked:
Expand All @@ -197,11 +215,15 @@ def WatermarkColorOption(self, state):
else:
self.watermarkOption = False

# Exif Padding 옵션
def ExifPaddingOption(self, state):
if state == Qt.Checked:
self.exifPaddingOpt = True
else:
self.exifPaddingOpt = False

def ExifSaveFormatOption(self):
self.saveFormatIndex = self.SaveFormatBox.currentIndex()

def main():
try:
Expand Down

0 comments on commit a9c872a

Please sign in to comment.