1
0
mirror of https://github.com/ciromattia/kcc synced 2025-12-17 03:31:56 +00:00

Fill detection final, final improvements

This commit is contained in:
Paweł Jastrzębski
2013-09-23 18:35:30 +02:00
parent 9168cd4109
commit f781b6785c
2 changed files with 21 additions and 23 deletions

View File

@@ -288,15 +288,16 @@ def getImageFileName(imgfile):
def applyImgOptimization(img, options, overrideQuality=5): def applyImgOptimization(img, options, overrideQuality=5):
img.getImageFill(options.webtoon)
if not options.webtoon: if not options.webtoon:
img.cropWhiteSpace(10.0) img.cropWhiteSpace(10.0)
if options.cutpagenumbers and not options.webtoon: if options.cutpagenumbers and not options.webtoon:
img.cutPageNumber() img.cutPageNumber()
img.optimizeImage(options.gamma) img.optimizeImage(options.gamma)
if overrideQuality != 5: if overrideQuality != 5:
img.resizeImage(options.upscale, options.stretch, options.bordersColor, overrideQuality, options.webtoon) img.resizeImage(options.upscale, options.stretch, options.bordersColor, overrideQuality)
else: else:
img.resizeImage(options.upscale, options.stretch, options.bordersColor, options.quality, options.webtoon) img.resizeImage(options.upscale, options.stretch, options.bordersColor, options.quality)
if options.forcepng and not options.forcecolor: if options.forcepng and not options.forcecolor:
img.quantizeImage() img.quantizeImage()

View File

@@ -151,6 +151,7 @@ class ComicPage:
self.border = None self.border = None
self.noHPV = None self.noHPV = None
self.noVPV = None self.noVPV = None
self.fill = None
def saveToDir(self, targetdir, forcepng, color, wipe): def saveToDir(self, targetdir, forcepng, color, wipe):
try: try:
@@ -194,12 +195,12 @@ class ComicPage:
palImg.putpalette(self.palette) palImg.putpalette(self.palette)
self.image = self.image.quantize(palette=palImg) self.image = self.image.quantize(palette=palImg)
def resizeImage(self, upscale=False, stretch=False, bordersColor=None, qualityMode=0, isWebToon=False): def resizeImage(self, upscale=False, stretch=False, bordersColor=None, qualityMode=0):
method = Image.ANTIALIAS method = Image.ANTIALIAS
if bordersColor: if bordersColor:
fill = bordersColor fill = bordersColor
else: else:
fill = self.getImageFill(isWebToon) fill = self.fill
if qualityMode == 0: if qualityMode == 0:
size = (self.size[0], self.size[1]) size = (self.size[0], self.size[1])
generateBorder = True generateBorder = True
@@ -422,29 +423,25 @@ class ComicPage:
def getImageFill(self, isWebToon): def getImageFill(self, isWebToon):
fill = 0 fill = 0
if isWebToon or self.rotated: if isWebToon or self.rotated:
fill += self.getImageHistogram(self.image.crop((0, 0, self.image.size[0], 1))) fill += self.getImageHistogram(self.image.crop((0, 0, self.image.size[0], 5)))
fill += self.getImageHistogram(self.image.crop((0, self.image.size[1]-1, self.image.size[0], fill += self.getImageHistogram(self.image.crop((0, self.image.size[1]-5, self.image.size[0],
self.image.size[1]))) self.image.size[1])))
else: else:
fill += self.getImageHistogram(self.image.crop((0, 0, 1, self.image.size[1]))) fill += self.getImageHistogram(self.image.crop((0, 0, 5, self.image.size[1])))
fill += self.getImageHistogram(self.image.crop((self.image.size[0]-1, 0, self.image.size[0], fill += self.getImageHistogram(self.image.crop((self.image.size[0]-5, 0, self.image.size[0],
self.image.size[1]))) self.image.size[1])))
if fill == 2: if fill == 2:
return 'black' self.fill = 'black'
elif fill == 0: elif fill == 0:
return 'white' self.fill = 'white'
else: else:
bBox = self.image.getbbox() fill = 0
wBox = ImageOps.invert(self.image).getbbox() fill += self.getImageHistogram(self.image.crop((0, 0, 5, 5)))
if bBox is None: fill += self.getImageHistogram(self.image.crop((self.image.size[0]-5, 0, self.image.size[0], 5)))
bBox = 0 fill += self.getImageHistogram(self.image.crop((0, self.image.size[1]-5, 5, self.image.size[1])))
fill += self.getImageHistogram(self.image.crop((self.image.size[0]-5, self.image.size[1]-5,
self.image.size[0], self.image.size[1])))
if fill > 1:
self.fill = 'black'
else: else:
bBox = (bBox[2]-bBox[0])*(bBox[3]-bBox[1]) self.fill = 'white'
if wBox is None:
wBox = 0
else:
wBox = (wBox[2]-wBox[0])*(wBox[3]-wBox[1])
if wBox <= bBox:
return "white"
else:
return "black"