On Fri, Jan 9, 2015 at 12:49 PM, <semeon.ri...@gmail.com> wrote: > On Thursday, 8 January 2015 20:54:38 UTC-6, Denis McMahon wrote: > > On Thu, 08 Jan 2015 22:07:03 +0000, Denis McMahon wrote: > > > > > On Thu, 08 Jan 2015 09:09:18 -0800, semeon.risom wrote: > > > > > >> Simple question. I hope. ..... > > > > To follow up, below is a solution to the problem you stated. > > > > #!/usr/bin/python > > > > import Image, ImageDraw, math > > > > def makeimg(length, orientation): > > """ > > Make an image file of a black 4 pixel wide line of defined length > > crossing and centered on a white background of 800 px square, save > > as a png file identifying line length and orientation in the file > > name. > > param length - pixels, length of the line > > param orientation - degrees, orientation ccw of the line from +ve x > > axis > > Files are saved in imgs subdir, this must already exist. > > File name is image_lll_ooo.jpg > > lll = length, ooo = orientation, both 0 padded to 3 digits > > """ > > > > # check length is +ve and not greater than 800 > > if length < 0: > > length = length * -1 > > if length > 800: > > length = 800 > > > > # check orientation is positive in range 0 .. 179 > > while orientation < 0: > > orientation = orientation + 360 > > if orientation > 179: > > orientation = orientation % 180 > > > > # calculate radius in pixels and orientation in radians > > radius = length / 2 > > orient = math.radians(orientation) > > > > # calculate xy coords in image space of line end points > > x1 = int(400 + (radius * math.cos(orient))) > > y1 = int(400 - (radius * math.sin(orient))) > > x2 = int(400 + (-radius * math.cos(orient))) > > y2 = int(400 - (-radius * math.sin(orient))) > > > > # create an image > > img = Image.new('RGB', (800,800), 'rgb(255, 255, 255)') > > # create a draw interface > > draw = ImageDraw.Draw(img) > > > > # draw the line on the image > > draw.line([(x1, y1), (x2, y2)], fill='rgb(0, 0, 0)', width=4) > > > > # determine file name, save image file > > fn = 'imgs/image_{:03d}_{:03d}.jpg'.format(length,orientation) > > img.save(fn) > > > > # stepping through ranges of values > > for length in range(100, 601, 100): > > for orientation in range(0, 171, 10): > > makeimg(length, orientation) > > > > # using lists of values > > for length in [50, 150, 250, 350, 450, 550, 650]: > > for orientation in [0, 15, 40, 45, 60, 75, 90, 105, 120, 135, 150, > > 165]: > > makeimg(length, orientation) > > > > > > > > > > -- > > Denis McMahon, denismfmcma...@gmail.com > > Thank you for the help btw. I think I'm close to a solution, but I'm > having issue feeding the coordinates from my csv file into the formula. > > This is the error I get: > Traceback (most recent call last): > File "C:\Users\Owner\Desktop\Stimuli Generation\Coordinates\Generate_w > corr.py", line 68, in <module> > makeimg(length, orientation) > File "C:\Users\Owner\Desktop\Stimuli Generation\Coordinates\Generate_w > corr.py", line 40, in makeimg > orientation = orientation % 180 > TypeError: unsupported operand type(s) for %: 'list' and 'int' > >>> > > and here's the code: > > from PIL import Image, ImageDraw > from numpy import math > > # import csv > import csv > f = open('C:\Users\Owner\DesktopStimuli Generation\Coordinates\file.csv', > 'rb') > rdr = csv.reader(f) > f.seek(0) > i = 0 > a = [] > b = [] > for row in rdr: > a.append(row[0]) > b.append(row[1]) > > def makeimg(length, orientation): > """ > Make an image file of a black 4 pixel wide line of defined length > crossing and centered on a white background of 800 px square, save > as a png file identifying line length and orientation in the file > name. > param length - pixels, length of the line > param orientation - degrees, orientation ccw of the line from +ve x > axis > Files are saved in imgs subdir, this must already exist. > File name is image_lll_ooo.jpg > lll = length, ooo = orientation, both 0 padded to 3 digits > """ > > # check length is +ve and not greater than 800 > if length < 0: > length = length * -1 > if length > 800: > length = 800 > > # check orientation is positive in range 0 .. 179 > while orientation < 0: > orientation = orientation + 360 > if orientation > 179: > orientation = orientation % 180 > > # calculate radius in pixels and orientation in radians > radius = length / 2 > orient = math.radians(orientation) > > # calculate xy coords in image space of line end points > x1 = int(400 + (radius * math.cos(orient))) > y1 = int(400 - (radius * math.sin(orient))) > x2 = int(400 + (-radius * math.cos(orient))) > y2 = int(400 - (-radius * math.sin(orient))) > > # create an image > img = Image.new('RGB', (800,800), 'rgb(255, 255, 255)') > # create a draw interface > draw = ImageDraw.Draw(img) > > # draw the line on the image > draw.line([(x1, y1), (x2, y2)], fill='rgb(0, 0, 0)', width=4) > > # determine file name, save image file > fn = 'imgs/image_{:03d}_{:03d}.jpg'.format(length,orientation) > img.save(fn) > > > # using lists of values > for length in [a]: > for orientation in [b]: > makeimg(length, orientation) >
above should be: for length in a: for orientation in b: -- > https://mail.python.org/mailman/listinfo/python-list > -- Joel Goldstick http://joelgoldstick.com
-- https://mail.python.org/mailman/listinfo/python-list