Initial commit
commit
5f4a8ce7b3
@ -0,0 +1 @@
|
|||||||
|
*.pyc
|
@ -0,0 +1,35 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
import os, argparse, subprocess
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(description='Batch-resizes images.')
|
||||||
|
|
||||||
|
parser.add_argument('images', metavar='IMAGE', type=str, nargs='+',
|
||||||
|
help='images to resize')
|
||||||
|
|
||||||
|
parser.add_argument('-s', dest='size', action='store', default="40%",
|
||||||
|
help='size specification to resize to (ImageMagick convert syntax)')
|
||||||
|
|
||||||
|
parser.add_argument('-t', dest='type', action='store', default="tif",
|
||||||
|
help='filetype to convert to (defaults to TIFF)')
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
options = vars(args)
|
||||||
|
|
||||||
|
for image in options['images']:
|
||||||
|
base_name = os.path.splitext(os.path.basename(image))[0]
|
||||||
|
base_path = os.path.dirname(image)
|
||||||
|
target_path = "%s/out" % base_path
|
||||||
|
target_file = "%s/%s.%s" % (target_path, base_name, options['type'])
|
||||||
|
|
||||||
|
try:
|
||||||
|
os.makedirs(target_path)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
result = subprocess.call(["convert", image, "-resize", options['size'], target_file])
|
||||||
|
|
||||||
|
if result == 0:
|
||||||
|
print "Successfully completed '%s' => '%s'" % (image, target_file)
|
||||||
|
else:
|
||||||
|
print "Failed conversion for '%s' with error code %d." % (image, result)
|
@ -0,0 +1,60 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
import sys, os, argparse
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(description='Fixes PDFs that are output by tiff2pdf, to get rid of the pink and green color overlay issue.')
|
||||||
|
|
||||||
|
parser.add_argument('files', metavar='FILE', type=str, nargs='+',
|
||||||
|
help='files to fix')
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
options = vars(args)
|
||||||
|
|
||||||
|
def chunked_replace(original_file, target_file, chunk_size, find, replace):
|
||||||
|
original = open(original_file, "rb")
|
||||||
|
target = open(target_file, "wb")
|
||||||
|
position = 0
|
||||||
|
|
||||||
|
while True:
|
||||||
|
# Read a normally sized chunk.
|
||||||
|
data = str(original.read(chunk_size))
|
||||||
|
|
||||||
|
# Replace all data immediately available in this read.
|
||||||
|
new_data = data.replace(find, replace)
|
||||||
|
|
||||||
|
# Check for partial matches. We will loop this to deal with false positives when the partial match
|
||||||
|
# turned out to be random, but another partial match follows immediately afterwards the original
|
||||||
|
# read.
|
||||||
|
while True:
|
||||||
|
found = False
|
||||||
|
|
||||||
|
# We will go from a large substring to a small substring to avoid false positives.
|
||||||
|
# If we went the other way around, repetitive patterns in the substring might cause havoc.
|
||||||
|
for length in reversed(xrange(1, len(find))):
|
||||||
|
if new_data.endswith(find[:length]):
|
||||||
|
# Partial match found.
|
||||||
|
missing_bytes = len(match_string) - length
|
||||||
|
new_data += str(original_file.read(missing_bytes))
|
||||||
|
new_data = new_data.replace(find, replace)
|
||||||
|
found = True
|
||||||
|
|
||||||
|
if found == False:
|
||||||
|
# No more partial matches to deal with here.
|
||||||
|
break
|
||||||
|
|
||||||
|
target.write(new_data)
|
||||||
|
|
||||||
|
if data == "":
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
position += chunk_size
|
||||||
|
|
||||||
|
original.close()
|
||||||
|
target.close()
|
||||||
|
|
||||||
|
for item in options['files']:
|
||||||
|
base_name, extension = os.path.splitext(os.path.basename(item))
|
||||||
|
base_path = os.path.dirname(item)
|
||||||
|
target_file = "%s/%s_fixed.%s" % (base_path, base_name, extension)
|
||||||
|
|
||||||
|
chunked_replace(item, target_file, 512 * 1024, b"ColorTransform 0", b"ColorTransform 1")
|
@ -0,0 +1,27 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
import sane, os
|
||||||
|
import scantools
|
||||||
|
|
||||||
|
scantools.init()
|
||||||
|
|
||||||
|
project_name = raw_input("Project name? ")
|
||||||
|
|
||||||
|
if project_name == "":
|
||||||
|
print "No valid project name given!"
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
try:
|
||||||
|
os.makedirs(project_name)
|
||||||
|
except OSError, e:
|
||||||
|
print "The given project already exists!"
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
raw_input("Press enter to start scanning...")
|
||||||
|
|
||||||
|
i = 1
|
||||||
|
|
||||||
|
while True:
|
||||||
|
scantools.scan(project_name, i)
|
||||||
|
raw_input("[+] Page %d finished, press enter to continue with next page..." % i)
|
||||||
|
i += 1
|
@ -0,0 +1,25 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
import sane, os
|
||||||
|
import scantools
|
||||||
|
|
||||||
|
scantools.init()
|
||||||
|
|
||||||
|
project_name = raw_input("[?] Project name? ")
|
||||||
|
|
||||||
|
if project_name == "":
|
||||||
|
print "No valid project name given!"
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
try:
|
||||||
|
os.makedirs(project_name)
|
||||||
|
except OSError, e:
|
||||||
|
print "WARNING: Project exists!"
|
||||||
|
|
||||||
|
num = int(raw_input("[?] What is the number of the first scan? "))
|
||||||
|
raw_input("Press enter to start scanning...")
|
||||||
|
|
||||||
|
while True:
|
||||||
|
scantools.scan(project_name, num)
|
||||||
|
num = int(raw_input("[+] Page %d finished. What is the number of the next scan? " % num))
|
||||||
|
raw_input("Press enter to start scanning...")
|
@ -0,0 +1,52 @@
|
|||||||
|
import sane, os
|
||||||
|
|
||||||
|
scanner = None
|
||||||
|
|
||||||
|
def init(**kwargs):
|
||||||
|
global scanner
|
||||||
|
|
||||||
|
sane.init()
|
||||||
|
|
||||||
|
devices = {}
|
||||||
|
i = 0
|
||||||
|
|
||||||
|
print "Available devices:"
|
||||||
|
|
||||||
|
for device in sane.get_devices():
|
||||||
|
devices[i] = device[0]
|
||||||
|
print "%d. [%s] %s %s" % (i, device[3], device[1], device[2])
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
choice = int(raw_input("[?] What device would you like to use? "))
|
||||||
|
|
||||||
|
try:
|
||||||
|
scanner = sane.open(devices[choice])
|
||||||
|
except KeyError, e:
|
||||||
|
print "You did not input a valid device ID."
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
resolution = raw_input("[?] Scan resolution (DPI)? [default: 300] ")
|
||||||
|
if resolution == "":
|
||||||
|
scanner.resolution = 300
|
||||||
|
else:
|
||||||
|
scanner.resolution = int(resolution)
|
||||||
|
|
||||||
|
|
||||||
|
width = raw_input("[?] Width (mm)? [default: 214] ")
|
||||||
|
if width == "":
|
||||||
|
scanner.br_x = 214
|
||||||
|
else:
|
||||||
|
scanner.br_x = int(width)
|
||||||
|
|
||||||
|
height = raw_input("[?] Height (mm)? [default: 295] ")
|
||||||
|
if height == "":
|
||||||
|
scanner.br_x = 295
|
||||||
|
else:
|
||||||
|
scanner.br_x = int(height)
|
||||||
|
|
||||||
|
scanner.tl_x = 0
|
||||||
|
scanner.tl_y = 0
|
||||||
|
|
||||||
|
def scan(projectname, num, **kwargs):
|
||||||
|
pil_image = scanner.scan()
|
||||||
|
pil_image.save("%s/%s.png" % (projectname, "{0:04d}".format(num)))
|
Loading…
Reference in New Issue