Added random dither and updated readme

This commit is contained in:
sloumdrone 2019-06-09 13:15:00 -07:00
parent ce837f1d7e
commit 2629d61866
2 changed files with 23 additions and 5 deletions

View File

@ -14,7 +14,7 @@ lid [option]... [source path] [output name]
Options:<br>
-f = output format, defaults to the recommended setting: png<br>
-m = mode, available: o4, o9, e. default: o4.<br>
-m = mode, available: o4, o9, e, t, r, a. default: o4.<br>
-q = quality (0 - 100), defaults to 90, only affects jpeg/jpg<br>
-t = threshold (0 - 255), defaults to image average level. only affects dither mode 't'
@ -28,6 +28,9 @@ Lid works best outputting png files from any input. You will get the smallest fi
#### t
This is the lowest quality mode. It produces the smallest file, but at the cost of most detail.
#### r
Random dithering produces a fairly large file (comparable to error diffusion), without moving much closer to photographic quality. However, it does provide an interesting effect.
#### o4
This mode is a noticable difference from the stark two tone appearance of threashold mode. The appearance 'gray' areas make for a slightly more photographic image.

23
lid
View File

@ -7,6 +7,7 @@
from PIL import Image
import sys
import os, os.path
from random import randint
class Dither:
def __init__(self, data):
@ -88,7 +89,14 @@ class Dither:
def random_dither(self):
pass
print("Dither method: random\033[?25l".format(self.threshold))
for row in range(0, self.height):
for col in range(0, self.width):
px = self.get_pixel(col, row)
rand = randint(1,255)
self.new_pixels[col, row] = int(px > rand)
self.update_progress()
self.save_file()
def error_diffusion_dither(self):
i = self.source_image.load()
@ -161,7 +169,7 @@ def display_help():
options:
-f output format. defaults to: png (recommended)
-m dither mode. defaults to: o4. other options: e, o9
-m dither mode. defaults to: o4. other options: e, o9, t, r, a
-q image quality. defaults to: 90. only has effect on png/jpg
-t threshold. default: image average tone. onls has effect in mode 't'
@ -179,6 +187,8 @@ def display_help():
the quality flag mostly seems to effect jpegs and does not do a whole
heap to PNG files, but play around with it as mileage may vary.
to output an image with each type of dither, use mode a
"""
print(helptext)
@ -226,8 +236,8 @@ def parse_input():
elif argmap["-f"] == "jpg":
argmap["-f"] = "jpeg"
if not argmap["-m"] in ["o4", "e", "o9", "t", "a"]:
print("lid error: invalid dither mode provided for -m. Options: o4, o9, e. Default: o4")
if not argmap["-m"] in ["o4", "e", "o9", "t", "r", "a"]:
print("lid error: invalid dither mode provided for -m. Options: o4, o9, e, t, r, a. Default: o4")
return None
try:
@ -267,6 +277,8 @@ if __name__ == "__main__":
d.error_diffusion_dither()
elif request["-m"] == "t":
d.threshold_dither()
elif request["-m"] == "r":
d.random_dither()
elif request["-m"] == "a":
name = request["out"]
request["out"] = name + "_o4"
@ -281,6 +293,9 @@ if __name__ == "__main__":
request["out"] = name + "_e"
d4 = Dither(request)
d4.error_diffusion_dither()
request["out"] = name + "_r"
d4 = Dither(request)
d4.random_diffusion_dither()
else:
print("Unknown mode flag")
sys.exit(2)