Attachment | Size |
---|---|
cross-stitchify_v2_1.zip | 15.03 KB |
Someone on an email list I belong to asked about ways of making a counted cross-stitch pattern from a photo. There are commercial packages that do this, but it seemed like something GIMP could do, and I wanted some Python practice.
Attached is a zip file containing the following files:
I used the Photoshop tutorial found here as my starting point. The script performs the following operations:
It appears in the menus under Filters > Decor > Cross-stitchify... It takes quite some time to run as I need to iterate through each tile of the image twice, and any interruption during the label phase can crash the script, but the output is quite good. The entire image can be printed for use as the pattern, or just the grid if printing in B&W.
UPDATE: version 2.0 - added creation of text file with list of what colour floss, and how many stitches of each, are used. Also allowed for greater range of mosaic sizes to accommodate wider range of images.
UPDATE: version 2.1 - added OS check: win32 opens text file, other OS displays message with path to file.
Comments
Slight correction
I think line 474 should read
if (currColor[0:3]) != (newColor[1:4])
instead of
if (currColor[0:2]) != (newColor[1:3])
The current version doesn't take blue into account when comparing colours, which is a problem if the design has adjacent black and navy squares.
Thanks for this by the way, it's saved me loads of effort :)
slight modification for 2.8
nevermind - redundant
How do I install?
I have put the .py file in ~jim/.gimp-2.6/plug-ins but it does not appear in any menu. The Help file says to put it where the compiled plug-ins go, but fails to identify that location...
I also added links in ../modules and ../scripts but no luck.
How do I get the file recognised?
Thanks
Jim
Problem solved.
Problem solved.
The .py file needs to have the execute permission set.
other directory
You can put the file here C:\Program Files\GIMP 2\lib\gimp\2.0\plug-ins, and it will load into GIMP 2.+
Same error?
Today I downloaded the script to my mother and she told me he was giving error. I tested and got the following feedback: -------------------------- Traceback (most recent call last): File "/usr/lib/gimp/2.0/python/gimpfu.py", line 692, in response dialog.res = run_script(params) File "/usr/lib/gimp/2.0/python/gimpfu.py", line 353, in run_script return apply(function, params) File "/usr/lib/gimp/2.0/plug-ins/cross-stitch.py", line 458, in cross_stitch theImage.resize(widthNew, heightNew, 0, 0) TypeError: integer argument expected, got float -------------------------- It looks like the same bug previously mentioned in other posts below. * I do not know if it changes anything in the case, but here we use Linux at home.
Can you help? :)
Rodrigo Boechat
This can be fixed as follows
Oops, after working out how to fix all by myself and posting this note, I just saw the reply from TikoQeri - apologies for the doubling up of the reply.
This can be fixed by making similar change in two places within the cross-stitch.py script. I am not saying that this is the best fix, but it deals with the error reported. My version of GIMP is 2.8.4.
First place is about line 456 in the cross-stitch.py file.
replace these two lines:
widthNew = widthOld * mosaicModified
heightNew = heightOld * mosaicModified
With:
widthNew = int(widthOld * mosaicModified + 0.5)
heightNew = int(heightOld * mosaicModified + 0.5)
Then at about line 493, replace these two lines:
widthNew = widthOld * mosaicModified
heightNew = heightOld * mosaicModified
With:
widthNew = int(widthOld * mosaicModified + 0.5)
heightNew = int(heightOld * mosaicModified + 0.5)
I am not sure if the + 0.5 is required, but I included it "just in case".
I just ran into the same
I just ran into the same error.To fix it, just make the following changes in two places in the plugin file (in my case it is: /usr/lib/gimp/2.0/plug-ins/cross-stitch.py) - lines 456-457 and 492-493
Find:
widthNew = widthOld * mosaicModified
heightNew = heightOld * mosaicModified
Change to:
widthNew = int(widthOld * mosaicModified)
heightNew = int(heightOld * mosaicModified)
Cross-stitchify v2.1
For anyone interested in using this script and is running Ubuntu Linux: Open the script cross-stitch.py in a text editor.
Change line 570 from:
pdb.gimp_message("Text file saved as: " + path)
to:
os.system("gedit"+ " " + path)
Save the script file and make sure the new version is in your plug-ins directory. This will start the gedit text editor and open the output file. I have only tried this on LinuxMint9 (Isadora), which is based on 10.04 Lucid Linux. If you prefer another text editor, try replacing "gedit" with your favorite editor. Note the quoted space between gedit and the path variable.
Bob63
PS: There may be a more "elegant" way to do this - getting the OS to open in whatever the user's default text editor might be - I'm still pondering and figuring out the Linux shell as I go...
Some systems may have a
Some systems may have a sensible-editor alias - probably all the Debian-based ones: http://www.tin.org/bin/man.cgi?section=1&topic=sensible-editor
There's also the EDITOR environment variable:
http://www.tin.org/bin/man.cgi?section=7&topic=environ
Pages