1
0
mirror of https://github.com/ciromattia/kcc synced 2025-12-13 09:46:25 +00:00

General improvements

This commit is contained in:
Paweł Jastrzębski
2013-09-16 17:17:13 +02:00
parent 1085673010
commit 8d5b2a9e88
2 changed files with 19 additions and 36 deletions

View File

@@ -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

View File

@@ -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)