Initial commit
This commit is contained in:
commit
93f32c5bac
|
@ -0,0 +1 @@
|
|||
.direnv
|
|
@ -0,0 +1,126 @@
|
|||
from PIL import Image, ImageFilter, ImageDraw, ImageEnhance
|
||||
import random
|
||||
import tempfile
|
||||
|
||||
# Thickness of the bars in the third (test) row.
|
||||
# No more than 10
|
||||
RESULTS = [0, 1, 4, 8, 16, 32, 20, 10, 5, 3]
|
||||
# Travel of the bars in the third (test) row.
|
||||
# No more than 10
|
||||
TRAVELS = [0, 0, 0, 3, 3, 3, 2, 1, 0, 4]
|
||||
|
||||
SIZE = (1024, 256)
|
||||
SSHIFT = 16
|
||||
OSIZE = (SIZE[0] + SSHIFT, SIZE[1] + SSHIFT)
|
||||
NNOISEBLOT = random.randrange(128)
|
||||
|
||||
im = Image.new("L", SIZE, "white")
|
||||
draw = ImageDraw.Draw(im)
|
||||
|
||||
# add large/macro noise
|
||||
for _ in range(NNOISEBLOT):
|
||||
noise_blot_x = random.randrange(OSIZE[0])
|
||||
noise_blot_y = random.randrange(OSIZE[1])
|
||||
noise_blot_size = random.randrange(int(max(OSIZE) / 32.0))
|
||||
draw.ellipse([(noise_blot_x, noise_blot_y), (noise_blot_x + noise_blot_size,
|
||||
noise_blot_y +
|
||||
noise_blot_size)], fill=226)
|
||||
|
||||
# blur out macro noise
|
||||
im = im.filter(ImageFilter.SMOOTH)
|
||||
im = im.filter(ImageFilter.MedianFilter(size=3))
|
||||
|
||||
# flip one in four pixels to thwart sharpening
|
||||
draw = ImageDraw.Draw(im)
|
||||
for y in range(OSIZE[1]):
|
||||
for x in range(OSIZE[0]):
|
||||
if random.choice([True, False]):
|
||||
npval = random.randrange(200, 250)
|
||||
draw.point((x, y), fill=npval)
|
||||
|
||||
# average, blur, and desaturate resulting noise to create backdrop
|
||||
im = im.filter(ImageFilter.MedianFilter(size=3))
|
||||
im = im.filter(ImageFilter.GaussianBlur(radius=8))
|
||||
|
||||
BAR_X_MARGIN = OSIZE[0] / 32
|
||||
BAR_HEIGHT = OSIZE[1] / 16
|
||||
BAR_BOUNDING_LEN = (OSIZE[0] - BAR_X_MARGIN) / 16
|
||||
draw = ImageDraw.Draw(im)
|
||||
for line_i in range(int((OSIZE[1] - BAR_HEIGHT) / (BAR_HEIGHT * 4))):
|
||||
for bar_i in range(int((OSIZE[0] - BAR_X_MARGIN) / (BAR_BOUNDING_LEN + BAR_X_MARGIN))):
|
||||
# for the p-control line, increasing concentration across
|
||||
height = bar_i * 2
|
||||
|
||||
# for the n-control line, random very low positives
|
||||
if line_i == 1:
|
||||
height = random.randrange(0, 4)
|
||||
if height < 3:
|
||||
continue
|
||||
height = height - 2
|
||||
|
||||
# for the test line, as indicated
|
||||
if line_i == 2:
|
||||
if len(RESULTS) > bar_i:
|
||||
height = RESULTS[bar_i]
|
||||
else:
|
||||
height = 0
|
||||
if height == 0:
|
||||
continue
|
||||
|
||||
travel = 0
|
||||
if len(TRAVELS) > bar_i:
|
||||
travel = TRAVELS[bar_i]
|
||||
x_offset = random.randrange(int(BAR_BOUNDING_LEN / 3))
|
||||
y_offset = (BAR_HEIGHT - height) / 2 - random.randrange(int(BAR_HEIGHT / 4))
|
||||
start_x = (BAR_BOUNDING_LEN * bar_i) + (BAR_X_MARGIN * (bar_i + 1)) + x_offset
|
||||
start_y = ((line_i + 1) * BAR_HEIGHT * 4) + y_offset - travel
|
||||
draw.rectangle([start_x, start_y, start_x + BAR_BOUNDING_LEN,
|
||||
start_y + height], fill=0)
|
||||
|
||||
if height == 0:
|
||||
continue
|
||||
|
||||
opaq = random.randrange(0, 192)
|
||||
incursion = random.randrange(1, 8)
|
||||
draw.rectangle([start_x + incursion, start_y - 2, start_x + BAR_BOUNDING_LEN - incursion,
|
||||
start_y + height - 2], fill=opaq)
|
||||
draw.rectangle([start_x, start_y + (height/2) - 2, start_x + BAR_BOUNDING_LEN,
|
||||
start_y + (height/2) + 2], fill=0)
|
||||
|
||||
if len(TRAVELS) > bar_i and TRAVELS[bar_i] != 0:
|
||||
start_x = (BAR_BOUNDING_LEN * bar_i) + (BAR_X_MARGIN * (bar_i + 1))\
|
||||
+ x_offset + (BAR_BOUNDING_LEN * 0.10)
|
||||
start_y = ((line_i + 1) * BAR_HEIGHT * 4) + y_offset
|
||||
draw.rectangle([start_x, start_y, start_x + (BAR_BOUNDING_LEN * 0.80),
|
||||
start_y + int(height / 2)], fill=64)
|
||||
|
||||
im = im.filter(ImageFilter.MedianFilter(size=3))
|
||||
|
||||
# draw random bars of white for proceessing noise
|
||||
draw = ImageDraw.Draw(im)
|
||||
n_bars = random.randrange(1, 10)
|
||||
for bar_i in range(int(n_bars)):
|
||||
x = random.randrange(OSIZE[0])
|
||||
width = random.randrange(1, 3)
|
||||
draw.line([x, 0, x + 3, OSIZE[1]], fill=255, width=width)
|
||||
|
||||
n_bars = random.randrange(30, 300)
|
||||
for pbar_i in range(int(n_bars)):
|
||||
x = random.randrange(OSIZE[0])
|
||||
ys = random.randrange(OSIZE[1])
|
||||
l = random.randrange(int(OSIZE[1] / 3))
|
||||
draw.line([x, ys, x, ys + l], fill=255, width=1)
|
||||
|
||||
n_bars = random.randrange(100, 1000)
|
||||
for pbar_i in range(int(n_bars)):
|
||||
y = random.randrange(OSIZE[1])
|
||||
xs = random.randrange(OSIZE[0])
|
||||
l = random.randrange(int(OSIZE[0] / 8))
|
||||
draw.line([xs, y, xs + l, y], fill=255, width=1)
|
||||
|
||||
im = im.filter(ImageFilter.GaussianBlur(radius=3))
|
||||
|
||||
im = im.crop((SSHIFT/2, SSHIFT/2, SIZE[0] - SSHIFT/2, SIZE[1] - SSHIFT/2))
|
||||
f = tempfile.NamedTemporaryFile(suffix=".png", delete=False, delete_on_close=False)
|
||||
im.save(f, format="png")
|
||||
print(f.name)
|
|
@ -0,0 +1,13 @@
|
|||
{ pkgs ? import (fetchTarball {
|
||||
name = "nixos-24.05-2024-05-25";
|
||||
url = "https://github.com/nixos/nixpkgs/archive/d12251ef6e8e6a46e05689eeccd595bdbd3c9e60.tar.gz";
|
||||
sha256 = "0khxvys8iz32pffyqqlch4s6f28vk8wj20d8w29salh2pm35z3yi";
|
||||
}) {} }:
|
||||
|
||||
pkgs.mkShellNoCC {
|
||||
packages = with pkgs; [
|
||||
(python312.withPackages (ps: [
|
||||
ps.pillow
|
||||
]))
|
||||
];
|
||||
}
|
Loading…
Reference in New Issue