DrawBot is a powerful, free application for macOS that invites you to write Python scripts to generate two-dimensional graphics

Overview

DrawBot Test Bench DrawBot App Builder codecov

DrawBot

DrawBot is a powerful, free application for macOS that invites you to write Python scripts to generate two-dimensional graphics. The built-in graphics primitives support rectangles, ovals, (bezier) paths, polygons, text objects, colors, transparency and much more. You can program multi-page documents and stop-motion animations. Export formats include PDF, SVG, PNG, JPEG, TIFF, animated GIF and MP4 video.

To download the latest version of the app, go to
http://www.drawbot.com/content/download.html


Using DrawBot as a Python module

DrawBot can also be installed as a Python module, the app is not required.

Install

The easiest way is to use pip:

$ pip install git+https://github.com/typemytype/drawbot

To install it manually, follow these instructions:

download: https://github.com/typemytype/drawbot/archive/master.zip

run cd run python setup.py install

Usage

import drawBot

drawBot.newDrawing()
drawBot.newPage(1000, 1000)
drawBot.rect(10, 10, 100, 100)
drawBot.saveImage("~/Desktop/aRect.png")
drawBot.endDrawing()

It is adviced to start with newDrawing() and end with endDrawing(), to clear the instruction stack and remove installed fonts.


Compile DrawBot from source

compile drawBot.app (with UI)

Required packages:

(Most of these are available through pip.)

Compile:

DrawBot is compiled with py2app into an application package.

cd path/To/drawBot
python setupApp.py py2app

compile drawBot Python module only

This module only works on Mac OS as it requires PyObjC, AppKit, CoreText Quartz and more.

Required packages:

Compile:

cd path/To/drawBot
python setup.py install

Release protocol

Comments
  • PDF header

    PDF header

    when importing DrawBot and generating a PDF, I'm getting an error after an update;

    failed to find PDF header:%PDF' not found.`

    as a warning, but second PDF won't build with this error:

    It is advised to use 'size()' at the top of a script

    Is this a new issue or am I doing something wrong?

    opened by michielkauwatjoe 25
  • Formatted string origin with different alignment

    Formatted string origin with different alignment

    I am using FormattedString() with "right" and "center" alignments for multiline strings, and noticed that text() will draw it the origin as the bottom left corner of the final line of the text. This means that for right and centered text, I cannot easily predict the position of the text relative to the origin point, because it is dependent on the length of the content in the last line.

    A demo:

    for alignment in ['center', 'right']:
        for myString in ['AA\nAAAA', 'AAAA\nAA']:
            newPage(1000, 1000)
            translate(250, 250)
            oval(-10, -10, 20, 20)
            fs = FormattedString(myString, align=alignment, fontSize=200)
            b = BezierPath()
            b.text(fs)
            drawPath(b)
    

    I'm not sure if there's actually an issue to be solved here, but I am curious if there a way to get them placed consistently?

    Of course this is not an issue when using textBox() instead of text(), but unfortunately I am trying to use this in conjunction BezierPath() which does not have a textBox() method.

    Have you considered making the origin for center-aligned text at the bottom center, and for right-aligned at the bottom right? (this is similar to what happens to alignments of basic text fields in Illustrator). I understand that a FormattedString can have more than one alignment, so maybe that’s not a perfect solution either.

    I think I might be able to work around this by calculating the final line of the string, making a separate FormattedString object, getting the textSize()[0] of that, and then offsetting the text object by that amount. Just wondering if there’s a more straightforward way before I go that route.

    As always, many many thanks!

    opened by djrrb 22
  • Numpy again (and NetworkX) in DrawBotPy3

    Numpy again (and NetworkX) in DrawBotPy3

    (PS: since Just closed the last version of this issue, I can't re-open it—sorry.)

    Hate to dig up an old issue, but I'm at a point in a current project in DBPy3 where I am ahead of my skis regarding graph and network functions, and could sure use numpy and NetworkX. I can import numpy in the 2.7 version of DrawBot thanks to last year's thread and Just/Frederik's help (thanks again, guys), but not NetworkX—and I can't import either one in Py3.

    I'm happy to download and install these modules by hand and update directories myself—for whatever reason, perhaps because of permissions issues with a school machine, who knows—I can't install these modules with pip (either pip can't find them or appropriate versions of them, or DB can't find them once they're installed, and sudo runs me into permissions errors). I just need to know where to put them and what edits to what scripts need making. (Again feeling the shame of being a Python dilettante, sorry.)

    opened by MauriceMeilleur 20
  • numpy headaches

    numpy headaches

    This is less an issue than a question, and probably one somebody with more experience than I have wouldn't have problems with at all.

    But here goes: I can't for the life of me get scripts to import numpy. scimath, math, work fine, but here's the error thrown if I import numpy:

    Traceback (most recent call last): File "", line 1, in File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/init.py", line 153, in File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/add_newdocs.py", line 13, in File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/lib/init.py", line 17, in ImportError: cannot import name scimath

    opened by MauriceMeilleur 19
  • Issue with application of OpenType features

    Issue with application of OpenType features

    Hi,

    I’m having issues applying OpenType features to text in a PDF. I’ve rewritten my own renderer to write original drawBot code so I can test it in the main DrawBot.app to rule out problems with my own code.

    For instance, the sups feature doesn’t apply. I’ve collected the files to test here. The example with the sups feature is in line 408 (result shows on page 3 in the PDF). The feature gets turned on beforehand and turned off afterwards. I found this to cause less confusion in the rendering than explicitly setting all available features at once.

    What puzzles me: If I reduce the code to just the necessary lines to render that text with the sups feature, it renders fine (never mind that the feature isn’t written professionally yet, as in all the glyphs in the example would get replaced at the moment, not contextually...). That means that somewhere along the way someone got confused with the commands to the point where features don’t get applied properly anymore.

    So this works, which is exactly the same code, only much less:

    import os
    
    newPage(595.275590551, 841.88976378)
    installFont(os.path.join(os.path.dirname(__file__), 'NonameSans-Regular.otf'))
    installFont(os.path.join(os.path.dirname(__file__), 'NonameSans-Bold.otf'))
    
    ########################
    
    cmykFill(0.0, 0.0, 0.0, 1.0, 1.0)
    stroke(None)
    strokeWidth(None)
    lineHeight(28.8)
    
    font('NonameSans-Bold')
    fontSize(24)
    language(None)
    textBox(u'''120m2''', (255.118110236, 501.732283465, 141.732283465, 56.6929133858), align = 'center')
    
    ########################
    
    fill(1.0, 0.411764705882, 0.490196078431, 1.0)
    stroke(None)
    strokeWidth(None)
    lineHeight(24.0)
    
    font('NonameSans-Regular')
    fontSize(20)
    language(None)
    textBox(u'''→''', (396.850393701, 527.811023622, 28.3464566929, 28.3464566929), align = 'center')
    
    ########################
    
    cmykFill(0.0, 0.0, 0.0, 1.0, 1.0)
    stroke(None)
    strokeWidth(None)
    lineHeight(28.8)
    
    font('NonameSans-Bold')
    fontSize(24)
    openTypeFeatures(sups=True)
    language(None)
    textBox(u'''120m2''', (425.196850394, 501.732283465, 141.732283465, 56.6929133858), align = 'center')
    openTypeFeatures(sups=False)
    
    opened by yanone 19
  • proposal: add support for ID and Class attributes to BezierPath

    proposal: add support for ID and Class attributes to BezierPath

    DrawBot can generate SVGs; SVGs can be embedded in HTML and styled with CSS just like the rest of the page.

    SVG objects need an ID or class so that CSS can refer to them. in the example below, id and class attributes were added manually after the SVG was generated.

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>SVG test</title>
    <style>
        svg { background-color: yellow; }
        #circle { fill: grey; }
        #circle:hover { stroke: magenta; }
        #square { stroke: red; stroke-width: 20px; }
        .shape:hover { fill: black !important; }
    </style>
    </head>
    <body>
    <!-- embedded SVG -->
    <svg height="800" version="1.1" width="800" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
     <path id='square' class='shape' d="M100,100 l400,0 l0,400 l-400,0 Z M100,100" fill="rgb(0,0,255)" transform="matrix(1,0,0,-1,0,800)"/>
     <path id='circle' class='shape' d="M641.42,358.58 c78.1,78.1,78.1,204.74,0,282.84 c-78.1,78.1,-204.74,78.1,-282.84,0 c-78.1,-78.1,-78.1,-204.74,0,-282.84 c78.1,-78.1,204.74,-78.1,282.84,0 Z M641.42,358.58" fill="rgb(255,0,0)" stroke="rgb(0,255,0)" stroke-width="20" transform="matrix(1,0,0,-1,0,800)"/>
    </svg>
    </body>
    </html>
    

    Proposal

    add support for setting an ID and/or class when the BezierPath is created:

    size(800, 800)
    
    B1 = BezierPath(ID='square', Class='shape')
    B1.rect(100, 100, 400, 400)
    fill(0, 0, 1)
    drawPath(B1)
    
    B2 = BezierPath(ID='circle', Class='shape')
    B2.oval(300, 300, 400, 400)
    fill(1, 0, 0)
    stroke(0, 1, 0)
    strokeWidth(20)
    drawPath(B2)
    
    saveImage('output.svg')
    

    thanks!

    opened by gferreira 18
  • Fonts are not reloaded even when changing on disk

    Fonts are not reloaded even when changing on disk

    I am using DrawBot to create proofs, the fonts used in those proofs are re-generated frequently. When I run the script from the DrawBot window, the font file that is picked up first stays active forever.

    My script is wrapped like this:

    newDrawing()
    	for fontFile in fontFiles:
    		newPage()
    		fs = FormattedString(
    			proofText, fontFile
    		)
    		text(fs)
    	for fontFile in fontFiles:
    		uninstallFont(fontFile)
    endDrawing()
    

    I explicitly added the newDrawing() and endDrawing() hoping it would have some kind of effect, but no. It works as expected when I run the script from the command line, but it sometimes is nice to have that visual output …

    bug 
    opened by frankrolf 18
  • *** DrawBot warning: OpenType feature 'numr/'dnom' not available ***

    *** DrawBot warning: OpenType feature 'numr/'dnom' not available ***

    Hi there, getting an error when trying to access Numerator numr and Denominator dnom features, not sure why!

    DrawBot: 3.118.1 (Extension) System: Mac OS 10.13.6

    Take a font like Source Serif Bold, which has simple numr and dnom features as follows:

    @FIG_LINING_TAB    =  [  zero       one       two       three       four       five       six       seven       eight       nine       ];
    @FIG_NUMR          =  [  zero.numr  one.numr  two.numr  three.numr  four.numr  five.numr  six.numr  seven.numr  eight.numr  nine.numr  ];
    @FIG_DNOM          =  [  zero.dnom  one.dnom  two.dnom  three.dnom  four.dnom  five.dnom  six.dnom  seven.dnom  eight.dnom  nine.dnom  ];
    
    @PUNCT_SMALL_FIG    = [ bracketleft      bracketright      parenleft      parenright      period      comma      ];
    @PUNCT_NUMR         = [ bracketleft.numr bracketright.numr parenleft.numr parenright.numr period.numr comma.numr ];
    @PUNCT_DNOM         = [ bracketleft.dnom bracketright.dnom parenleft.dnom parenright.dnom period.dnom comma.dnom ];
    
    #--------------------------------------
    feature numr { # Numerators
        lookup NUMR {
            sub @FIG_LINING_TAB by @FIG_NUMR;
            sub @PUNCT_SMALL_FIG by @PUNCT_NUMR;
        } NUMR;
    } numr;
    
    
    #--------------------------------------
    feature dnom { # Denominators
        sub @FIG_LINING_TAB by @FIG_DNOM;
        sub @PUNCT_SMALL_FIG by @PUNCT_DNOM;
    } dnom;
    

    And then the following DrawBot code:

    import drawBot as db
    
    db.newPage(500,100)
    s = db.FormattedString("123/45679",
        font="SourceSerifPro-Bold.otf",
        fontSize=100,
        openTypeFeatures={"dnom": True}
    )
    
    db.text(s, (20,20))
    

    The above results in

    *** DrawBot warning: OpenType feature 'dnom' not available ***
    

    Same with numr. If you replace dnom with frac, the code works, and both numerators and denominators show up.

    The numr and dnom features work in other programs (like Adobe InDesign), and FeaturePreview. Any idea why they aren't working here?

    DrawBot Error.zip

    opened by colinmford 16
  • Weird FormattedString issue on 10.15

    Weird FormattedString issue on 10.15

    I installed the 10.15 Beta on my secondary computer just to poke around a bit. When trying out some basic DrawBot, I stumbled upon this problem:

    content = 'abc'
    font_name = 'LucidaGrande'
    fs = FormattedString()
    fs.append(content, font=font_name, fontSize=20)
    fs.append(' ')
    fs.append(font_name, font='InputMono-Regular', fontSize=10)
    
    text(fs, (100, 200))
    

    The script runs, and displays output, but also the following traceback:

    Traceback (most recent call last):
      File "<untitled>", line 8, in <module>
      File "drawBot/drawBotDrawingTools.pyc", line 1611, in text
      File "drawBot/drawBotDrawingTools.pyc", line 1779, in textBox
      File "drawBot/context/baseContext.pyc", line 2310, in clippedText
      File "drawBot/context/baseContext.pyc", line 1180, in __getitem__
      File "drawBot/context/baseContext.pyc", line 904, in __init__
      File "drawBot/context/baseContext.pyc", line 912, in _setAttribute
      File "drawBot/context/baseContext.pyc", line 1354, in openTypeFeatures
      File "drawBot/context/baseContext.pyc", line 1368, in listOpenTypeFeatures
      File "drawBot/misc.pyc", line 362, in wrapper
      File "drawBot/context/tools/openType.pyc", line 509, in getFeatureTagsForFontName
      File "drawBot/context/tools/openType.pyc", line 495, in getFeatureTagsForDescriptions
      File "objc/_convenience_mapping.pyc", line 18, in __getitem__objectForKey_
      File "objc/_convenience.pyc", line 101, in container_unwrap
    KeyError: 'CTFeatureSelectorIdentifier'
    
    

    It is entirely possible this has nothing to do with DrawBot at all, but I thought it might be interesting to know about it.

    opened by frankrolf 15
  • Is it possible to detect missing glyphs in a font? Are there good workarounds?

    Is it possible to detect missing glyphs in a font? Are there good workarounds?

    I'm working on a simple tool for Drawbot (code on GitHub) to juxtapose characters in a string in letters from multiple fonts. The ultimate intent is to test fonts in early development, where I want to determine the proper relative proportions of characters (e.g. find the best x-height between a regular and a bold) and check that different styles in a larger type system are stylistically related (e.g. see that a sans and serif have a similar feeling between letters).

    For example, here's a partially-drawn lowercase set against two existing fonts:

    image

    This example uses a script font to make it obvious where characters are not-yet drawn. However, it would be more effective to have more control over the fallback font in these spaces that are present, but not the focus. It would be nice to do something like make these into light-gray letters or display notdef glyphs.

    A few things that seem like they might potentially help, though I haven't been able to accomplish them / find methods for them yet:

    • Directly detecting if a glyph is missing from the target font, and triggering some code
    • Detecting some UFO parameter of the fallback font, when the fallback font is used, and use that to change its size/color/content. E.g. checking if a character's x-height is equal to the x-height of the fallback font, then manipulating it.
    • Creating a list of all existing characters in a given font, and if the character in the test string doesn't match one of those, triggering some code.

    Hacky ways I've considered are:

    • Making all glyphs in Robofont, but leaving them empty until I can draw them (this would make the tool less helpful for others, though)
    • Finding a system font on macOS that is entirely bullets/rectangles/something similar, though even if such a system font exists (I don't know of any), this still wouldn't allow the flexibility or control that would be ideal to make this truly useful.

    I've already asked @justvanrossum, and he suggested filing an issue here, as detecting missing glyphs is not something he is aware of, but something which might be useful. If there is a simpler way to handle a case like this, I'd be excited to learn about it! If it would take building a new feature, however, I'd be happy to contribute however I can.

    Thanks for building such a great set of software!

    opened by thundernixon 15
  • [question] position of first baseline?

    [question] position of first baseline?

    In a text box, how does DrawBot specify the position of the first baseline for a given font? I am currently working on a script that layers different fonts, and need to calculate the baseline offset – unfortunately that’s trickier than expected.

    A common assumption is just subtracting the hhea.ascent value from the top of the text frame, but it’s not that simple – especially in fonts where hhea.ascent + |hhea.descent| != 1000.

    Here is my test data (for simplicity’s sake, font size = UPM = 1000):

        # SourceSansPro-Bold
        # head.yMax: 1009
        # hhea.ascent: 984
        # hhea.descent: -273
        # hhea.lineGap: 0
        # baseline is 855 below top of text frame
    
        # SourceSerifPro-Light
        # head.yMax: 976
        # hhea.ascent: 1036
        # hhea.descent: -335
        # hhea.lineGap: 0
        # baseline is 850 below top of text frame
    
        # MyriadPro-Light
        # head.yMax: 935
        # hhea.ascent: 750
        # hhea.descent: -250
        # hhea.lineGap: 200
        # baseline is 750 below top of text frame
    

    This may have been solved by @petrvanblokland – I assume pageBot can deal with baselines?

    question 
    opened by frankrolf 15
  • Cancelling with command-period crahses hard

    Cancelling with command-period crahses hard

    import time
    
    for i in range(100):
        print(i)
        time.sleep(0.2)
    

    Type command-period while the above is running. It exists with a hard crash Illegal instruction: 4

    opened by justvanrossum 8
  • Code completion currently doesn't seem to work

    Code completion currently doesn't seem to work

    Traceback (most recent call last):
      File "/Users/just/code/git/drawbot/dist/DrawBot.app/Contents/Resources/lib/python3.9/drawBot/ui/codeEditor.py", line 288, in _pythonWordCompletions
    TypeError: __init__() got an unexpected keyword argument 'source'
    
    opened by justvanrossum 0
  • missing module »cmath«

    missing module »cmath«

    Hi all, since the update to 3.129 (python3.10) it seems that the module »cmath« is missing. When I'm using the pandas-tool (https://pandas.pydata.org) or just using import cmath an error Message pops up: »ModuleNotFoundError: No module named 'cmath'«

    opened by READ 5
  • deprecated workflow

    deprecated workflow

    Warning: The set-output command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/

    https://github.com/typemytype/drawbot/actions/runs/3750328273/jobs/6369899166#step:12:10

    opened by typemytype 1
  • listNamedInstances return wrong value

    listNamedInstances return wrong value

    Hi,

    I tried recently to get instances name of a variable using listNamedInstances(fontPath) I tried different variable font (mine and some from Google Font) and the function always return an OrderedDict which contain only the first instance.

    Here are some results with Google Fonts :

    OpenSans OrderedDict([('OpenSansRoman-Light', {'wght': 800.0, 'wdth': 75.0})])

    Montserrat OrderedDict([('Montserrat-Thin', {'wght': 900.0})])

    Raleway OrderedDict([('Raleway-Thin', {'wght': 900.0})])

    Inter OrderedDict([('Inter-Regular_Thin', {'wght': 900.0, 'slnt': -10.0})])

    opened by HugoJourdan 5
Releases(3.129)
  • 3.129(Dec 22, 2022)

    • Upgrade to python 3.9!!
    • textBox box: negative rectangles will be normalized.
    • Fix bug while extracting variable font name ids.
    • Improve ImageObject generators.
    • Add support for formatting code, see Python menu.
    • Improve support for pathlib.Path where ever a path is needed.
    • Support for saveImage("NSImage") and saveImage("PIL") returning image objects.
    • Add support for norm, lerp and remap.
    • Support formattedText.appendGlyph(index): adding glyphs by index.
    • Add with drawing() wrapping newDrawing() and endDrawing().
    Source code(tar.gz)
    Source code(zip)
    DrawBot.dmg(51.88 MB)
  • 3.128(Aug 9, 2021)

  • 3.127(Apr 29, 2021)

    • Allow Path objects in places where a path is an argument: saveImage(pathObject), image(pathObject, ...)
    • Add support for asyncio by lauching the app with corefoundationasyncio.
    • Remove mov context in favor of mp4 as QTKit is not supported anymore.
    • Always draw a white background while rendering to mp4.
    • Improve reading out and using fonts from disk, use them direclty instead of installing them.
    • Update documentation.
    Source code(tar.gz)
    Source code(zip)
    DrawBot.dmg(45.61 MB)
  • 3.126(Jun 2, 2020)

    • Improve update checker.
    • Fix docs for listOpenTypeFeatures.
    • Add argument while saving an animated gif: loop.
    • Add argument while saving an image: antiAliasing.
    • Improve the difference between kerning (an OpenType feature) and tracking (adding white space between characters).
    • Add textBoxCharacterBounds(text, box) returning a list of typesetted bounding boxes.
    • Improve text(..) typesetting with multiline text and paragraph styles.
    • Add formattedString.url(url).
    • Add linkURL(url, box).
    • Add option continuous in Variable(.., continuous=False).
    Source code(tar.gz)
    Source code(zip)
    DrawBot.dmg(45.16 MB)
  • 3.125(Apr 22, 2020)

  • 3.124(Mar 28, 2020)

  • 3.123(Mar 3, 2020)

    • Fully notarized and built with GitHub Actions!!!!
    • Improve pip installer.
    • Support viewBox in svg output.
    • Point attributes of a BezierPath are immutable.
    • Fix bug when an FormattedString contains an empty last line.
    • Don't optimize an empty BezierPath.
    • Improve updater message.
    • Upgrade code editor lexer to python3.
    • Upgrade internal tool potrace and mkbitmap.
    • Add context-specific attributes for BezierPath and FormattedString: svgLink, svgID, svgClass.
    Source code(tar.gz)
    Source code(zip)
    DrawBot.dmg(44.74 MB)
  • 3.122(Nov 3, 2019)

    • Adding bezierPath.expandStroke(width, lineCap="round", lineJoin="round", miterLimit=10) (thanks to Bahman Eslami)
    • Improved internal OpenType feature tags setting
    • Improved complex formattedString type setting
    • Improved alignment with text() and FormattedString
    • Added a DrawBot frontend for pip/PyPI to make it super easy to install third-party packages: see menu Python -> Install Python Packages
    • Fixed text stroke behavior (but is a breaking change): strokeWidth on text no longer scales with the fontSize
    • Removed support for .mov export on 10.15 and up (QTKit is no longer supported there)
    • Fixed extracting single frames from .gif files
    • Improved setup.py, so drawbot-as-a-module can be easily installed with pip using a github URL
    • All test now run on Travis CI (and soon also on GitHub Actions)
    • Removed Python 2 code
    • Many small issues were fixed
    Source code(tar.gz)
    Source code(zip)
    DrawBot.dmg(49.96 MB)
A Python package implementing various HDRI / Radiance image processing algorithms.

Colour - HDRI A Python package implementing various HDRI / Radiance image processing algorithms. It is open source and freely available under the New

colour-science 111 Dec 06, 2022
Fuzzware is a project for automated, self-configuring fuzzing of firmware images

Fuzzware Fuzzware is a project for automated, self-configuring fuzzing of firmware images. The idea of this project is to configure the memory ranges

190 Dec 21, 2022
hashmask reverse lookup

ImageHashMasks Lookup Hashmask NFT index from a picture Setup pip install pillow click imagehash Usage $ python imagehashmasks.py

17 Nov 29, 2021
Hello, this project is an example of how to generate a QR Code using python 😁

Hello, this project is an example of how to generate a QR Code using python 😁

Davi Antonaji 2 Oct 12, 2021
Image Processing HighPass Filter With Python

Image_Processing_HighPassFilter High Pass Filter take the high frequency and ignore the low frequency High Pass Filter can be use to sharpening an ima

Felix Pratamasan 1 Dec 27, 2021
A simple image to text converter with GUI!

TEXTEMAGE! Textemage is a quick tool that extracts text from images, it is a Python based GUI program(also available in executable version). This is a

Akascape 5 Oct 26, 2022
QR-Generator - An awesome QR Generator to create or customize your QR's

QR Generator An awesome QR Generator to create or customize your QR's! Table of

Tristán 1 Jan 28, 2022
Command line utility for converting images to seamless tiles

img2texture Command line utility for converting images to seamless tiles. The resulting tiles can be used as textures in games, compositing and 3D mod

Artёm IG 24 Dec 26, 2022
Snowfall - helpful image handling utils - abstracts various file and opencv and pil features into result oriented functions

snowfall helpful image handling utils - abstracts various file and opencv and pil features into result oriented functions usage examples: from image_h

Less Wright 2 Jan 09, 2022
Scramb.py is a region based JPEG Image Scrambler and Descrambler written in Python

Scramb.py Scramb.py is a region based JPEG Image Scrambler and Descrambler written in Python. Main features Scramb.py can scramble images regions. So

47 Dec 25, 2022
👷 Build images with images

👷 Build images with images. About Tiler is a tool to create an image using all kinds of other smaller images (tiles). It is different from other mosa

5.5k Jan 03, 2023
Rotates your images in the spirit of rot13

Image Rotator (imrot10) Its like rot13 but for images. Calling the algorithm imrot10 for im = image, rot = rotation, 10 = default magnitude. Unfortuna

Sarah 2 Dec 10, 2021
Blender addon to generate better building models from satellite imagery.

Blender addon to generate better building models from satellite imagery.

Ivan Ereshchenko 24 Apr 14, 2022
An open source image editor which can manipulate an image in many ways!

Image Editor - An open source image editor which can manipulate an image in many ways! If you need any more modes in repo or I

TroJanzHEX 44 Nov 17, 2022
starfish is a Python library for processing images of image-based spatial transcriptomics.

starfish: scalable pipelines for image-based transcriptomics starfish is a Python library for processing images of image-based spatial transcriptomics

199 Dec 08, 2022
SALaD (Semi-Automatic Landslide Detection) is a landslide mapping system

SALaD (Semi-Automatic Landslide Detection) is a landslide mapping system. SALaD utilizes Object-based Image Analysis and Random Forest to map landslides.

NASA 14 Jan 04, 2023
A script to generate a profile picture and a banner that show the same image on Discord.

Discord profile picture & banner generator A script to generate a profile picture and a banner that show the same image on Discord. Installation / Upd

Victor B. 9 Nov 27, 2022
Clip Bing Maps backgound as RGB geotif image using center-point from vector data of a shapefile and Bing Maps zoom

Clip Bing Maps backgound as RGB geotif image using center-point from vector data of a shapefile and Bing Maps zoom. Also, rasterize shapefile vectors as corresponding label image.

Gounari Olympia 2 Nov 22, 2021
Simple utility to tinker with OPlus images

OPlus image utilities Prerequisites Linux running kernel 5.4 or up (check with uname -r) Image rebuilding Used to rebuild read-only erofs images into

Wiley Lau 15 Dec 28, 2022
PyGram Instagram-like image filters.

PyGram Instagram-like image filters. Usage First, import the client: from filters import * Instanciate a filter and apply it: f = Nashville("image.jp

Ajay Kumar Nagaraj 102 Feb 21, 2022