mirror of
https://github.com/ciromattia/kcc
synced 2025-12-13 09:46:25 +00:00
General improvements
This commit is contained in:
@@ -372,7 +372,7 @@ def fileImgProcess(work):
|
|||||||
split = None
|
split = None
|
||||||
else:
|
else:
|
||||||
split = img.splitPage(dirpath, options.righttoleft, options.rotate)
|
split = img.splitPage(dirpath, options.righttoleft, options.rotate)
|
||||||
if split is not None and split is not "R":
|
if split is not None:
|
||||||
if options.verbose:
|
if options.verbose:
|
||||||
print "Splitted " + afile
|
print "Splitted " + afile
|
||||||
output = pagenumber
|
output = pagenumber
|
||||||
@@ -391,13 +391,14 @@ def fileImgProcess(work):
|
|||||||
img4.saveToDir(dirpath, options.forcepng, options.forcecolor, True)
|
img4.saveToDir(dirpath, options.forcepng, options.forcecolor, True)
|
||||||
else:
|
else:
|
||||||
applyImgOptimization(img, options)
|
applyImgOptimization(img, options)
|
||||||
img.saveToDir(dirpath, options.forcepng, options.forcecolor, wipe, split)
|
img.saveToDir(dirpath, options.forcepng, options.forcecolor, wipe)
|
||||||
if options.quality == 2:
|
if options.quality == 2:
|
||||||
img2 = image.ComicPage(os.path.join(dirpath, afile), options.profileData)
|
img2 = image.ComicPage(os.path.join(dirpath, afile), options.profileData)
|
||||||
if split == "R":
|
if img.rotated:
|
||||||
img2.image = img2.image.rotate(90)
|
img2.image = img2.image.rotate(90)
|
||||||
|
img2.rotated = True
|
||||||
applyImgOptimization(img2, options, 0)
|
applyImgOptimization(img2, options, 0)
|
||||||
img2.saveToDir(dirpath, options.forcepng, options.forcecolor, True, split)
|
img2.saveToDir(dirpath, options.forcepng, options.forcecolor, True)
|
||||||
return output
|
return output
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
46
kcc/image.py
46
kcc/image.py
@@ -146,15 +146,18 @@ class ComicPage:
|
|||||||
raise RuntimeError('Image file %s is corrupted' % source)
|
raise RuntimeError('Image file %s is corrupted' % source)
|
||||||
self.image = Image.open(source)
|
self.image = Image.open(source)
|
||||||
self.image = self.image.convert('RGB')
|
self.image = self.image.convert('RGB')
|
||||||
|
self.rotated = None
|
||||||
|
self.border = None
|
||||||
|
self.noHPV = None
|
||||||
|
self.noVPV = None
|
||||||
|
|
||||||
def saveToDir(self, targetdir, forcepng, color, wipe, suffix=None):
|
def saveToDir(self, targetdir, forcepng, color, wipe):
|
||||||
try:
|
try:
|
||||||
|
suffix = ""
|
||||||
if not color:
|
if not color:
|
||||||
self.image = self.image.convert('L') # convert to grayscale
|
self.image = self.image.convert('L') # convert to grayscale
|
||||||
if suffix == "R":
|
if self.rotated:
|
||||||
suffix = "_kccrot"
|
suffix += "_kccrot"
|
||||||
else:
|
|
||||||
suffix = ""
|
|
||||||
if wipe:
|
if wipe:
|
||||||
os.remove(os.path.join(targetdir, self.filename))
|
os.remove(os.path.join(targetdir, self.filename))
|
||||||
else:
|
else:
|
||||||
@@ -213,18 +216,10 @@ class ComicPage:
|
|||||||
if generateBorder:
|
if generateBorder:
|
||||||
if (self.image.size[0]-(2*borderw))*1.5 < self.size[0]:
|
if (self.image.size[0]-(2*borderw))*1.5 < self.size[0]:
|
||||||
self.noHPV = True
|
self.noHPV = True
|
||||||
else:
|
|
||||||
self.noHPV = None
|
|
||||||
if (self.image.size[1]-(2*borderh))*1.5 < self.size[1]:
|
if (self.image.size[1]-(2*borderh))*1.5 < self.size[1]:
|
||||||
self.noVPV = True
|
self.noVPV = True
|
||||||
else:
|
|
||||||
self.noVPV = None
|
|
||||||
self.border = [int(round(float(borderw)/float(self.image.size[0])*100, 2)*100*1.5),
|
self.border = [int(round(float(borderw)/float(self.image.size[0])*100, 2)*100*1.5),
|
||||||
int(round(float(borderh)/float(self.image.size[1])*100, 2)*100*1.5)]
|
int(round(float(borderh)/float(self.image.size[1])*100, 2)*100*1.5)]
|
||||||
else:
|
|
||||||
self.border = None
|
|
||||||
self.noHPV = None
|
|
||||||
self.noVPV = None
|
|
||||||
return self.image
|
return self.image
|
||||||
else:
|
else:
|
||||||
method = Image.BILINEAR
|
method = Image.BILINEAR
|
||||||
@@ -238,22 +233,14 @@ class ComicPage:
|
|||||||
if border is not None:
|
if border is not None:
|
||||||
if (border[2]-border[0])*1.5 < self.size[0]:
|
if (border[2]-border[0])*1.5 < self.size[0]:
|
||||||
self.noHPV = True
|
self.noHPV = True
|
||||||
else:
|
|
||||||
self.noHPV = None
|
|
||||||
if (border[3]-border[1])*1.5 < self.size[1]:
|
if (border[3]-border[1])*1.5 < self.size[1]:
|
||||||
self.noVPV = True
|
self.noVPV = True
|
||||||
else:
|
|
||||||
self.noVPV = None
|
|
||||||
self.border = [int(round(float(border[0])/float(self.image.size[0])*100, 2)*100*1.5),
|
self.border = [int(round(float(border[0])/float(self.image.size[0])*100, 2)*100*1.5),
|
||||||
int(round(float(border[1])/float(self.image.size[1])*100, 2)*100*1.5)]
|
int(round(float(border[1])/float(self.image.size[1])*100, 2)*100*1.5)]
|
||||||
else:
|
else:
|
||||||
self.border = [0, 0]
|
self.border = [0, 0]
|
||||||
self.noHPV = True
|
self.noHPV = True
|
||||||
self.noVPV = True
|
self.noVPV = True
|
||||||
else:
|
|
||||||
self.border = None
|
|
||||||
self.noHPV = None
|
|
||||||
self.noVPV = None
|
|
||||||
return self.image
|
return self.image
|
||||||
ratioDev = float(self.size[0]) / float(self.size[1])
|
ratioDev = float(self.size[0]) / float(self.size[1])
|
||||||
if (float(self.image.size[0]) / float(self.image.size[1])) < ratioDev:
|
if (float(self.image.size[0]) / float(self.image.size[1])) < ratioDev:
|
||||||
@@ -271,22 +258,14 @@ class ComicPage:
|
|||||||
if border is not None:
|
if border is not None:
|
||||||
if (border[2]-border[0])*1.5 < self.size[0]:
|
if (border[2]-border[0])*1.5 < self.size[0]:
|
||||||
self.noHPV = True
|
self.noHPV = True
|
||||||
else:
|
|
||||||
self.noHPV = None
|
|
||||||
if (border[3]-border[1])*1.5 < self.size[1]:
|
if (border[3]-border[1])*1.5 < self.size[1]:
|
||||||
self.noVPV = True
|
self.noVPV = True
|
||||||
else:
|
|
||||||
self.noVPV = None
|
|
||||||
self.border = [int(round(float(border[0])/float(self.image.size[0])*100, 2)*100*1.5),
|
self.border = [int(round(float(border[0])/float(self.image.size[0])*100, 2)*100*1.5),
|
||||||
int(round(float(border[1])/float(self.image.size[1])*100, 2)*100*1.5)]
|
int(round(float(border[1])/float(self.image.size[1])*100, 2)*100*1.5)]
|
||||||
else:
|
else:
|
||||||
self.border = [0, 0]
|
self.border = [0, 0]
|
||||||
self.noHPV = True
|
self.noHPV = True
|
||||||
self.noVPV = True
|
self.noVPV = True
|
||||||
else:
|
|
||||||
self.border = None
|
|
||||||
self.noHPV = None
|
|
||||||
self.noVPV = None
|
|
||||||
return self.image
|
return self.image
|
||||||
|
|
||||||
def splitPage(self, targetdir, righttoleft=False, rotate=False):
|
def splitPage(self, targetdir, righttoleft=False, rotate=False):
|
||||||
@@ -296,8 +275,10 @@ class ComicPage:
|
|||||||
if (width > height) != (dstwidth > dstheight):
|
if (width > height) != (dstwidth > dstheight):
|
||||||
if rotate:
|
if rotate:
|
||||||
self.image = self.image.rotate(90)
|
self.image = self.image.rotate(90)
|
||||||
return "R"
|
self.rotated = True
|
||||||
|
return None
|
||||||
else:
|
else:
|
||||||
|
self.rotated = False
|
||||||
if width > height:
|
if width > height:
|
||||||
# Source is landscape, so split by the width
|
# Source is landscape, so split by the width
|
||||||
leftbox = (0, 0, width / 2, height)
|
leftbox = (0, 0, width / 2, height)
|
||||||
@@ -323,6 +304,7 @@ class ComicPage:
|
|||||||
raise RuntimeError('Cannot write image in directory %s: %s' % (targetdir, e))
|
raise RuntimeError('Cannot write image in directory %s: %s' % (targetdir, e))
|
||||||
return fileone, filetwo
|
return fileone, filetwo
|
||||||
else:
|
else:
|
||||||
|
self.rotated = False
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def cutPageNumber(self):
|
def cutPageNumber(self):
|
||||||
@@ -438,7 +420,7 @@ class ComicPage:
|
|||||||
|
|
||||||
def getImageFill(self, isWebToon):
|
def getImageFill(self, isWebToon):
|
||||||
fill = 0
|
fill = 0
|
||||||
if isWebToon:
|
if isWebToon or self.rotated:
|
||||||
imageT = self.image.crop((0, 0, self.image.size[0], 1))
|
imageT = self.image.crop((0, 0, self.image.size[0], 1))
|
||||||
imageB = self.image.crop((0, self.image.size[1]-1, self.image.size[0], self.image.size[1]))
|
imageB = self.image.crop((0, self.image.size[1]-1, self.image.size[0], self.image.size[1]))
|
||||||
fill += self.getImageHistogram(imageT)
|
fill += self.getImageHistogram(imageT)
|
||||||
@@ -453,7 +435,7 @@ class ComicPage:
|
|||||||
elif fill == 0:
|
elif fill == 0:
|
||||||
return 'white'
|
return 'white'
|
||||||
else:
|
else:
|
||||||
if isWebToon:
|
if isWebToon or self.rotated:
|
||||||
imageL = self.image.crop((0, 0, 1, self.image.size[1]))
|
imageL = self.image.crop((0, 0, 1, self.image.size[1]))
|
||||||
imageR = self.image.crop((self.image.size[0]-1, 0, self.image.size[0], self.image.size[1]))
|
imageR = self.image.crop((self.image.size[0]-1, 0, self.image.size[0], self.image.size[1]))
|
||||||
fill += self.getImageHistogram(imageL)
|
fill += self.getImageHistogram(imageL)
|
||||||
|
|||||||
Reference in New Issue
Block a user