def test_save_colorkey(self):
""" make sure the color key is not changed when saving.
"""
s = pygame.Surface((10,10), pygame.SRCALPHA, 32)
s.fill((23,23,23))
s.set_colorkey((0,0,0))
colorkey1 = s.get_colorkey()
p1 = s.get_at((0,0))
temp_filename = "tmpimg.png"
try:
pygame.image.save(s, temp_filename)
s2 = pygame.image.load(temp_filename)
finally:
os.remove(temp_filename)
colorkey2 = s.get_colorkey()
# check that the pixel and the colorkey is correct.
self.assertEqual(colorkey1, colorkey2)
self.assertEqual(p1, s2.get_at((0,0)))
python类image()的实例源码
def todo_test_frombuffer(self):
# __doc__ (as of 2008-08-02) for pygame.image.frombuffer:
# pygame.image.frombuffer(string, size, format): return Surface
# create a new Surface that shares data inside a string buffer
#
# Create a new Surface that shares pixel data directly from the string
# buffer. This method takes the same arguments as
# pygame.image.fromstring(), but is unable to vertically flip the
# source data.
#
# This will run much faster than pygame.image.fromstring, since no
# pixel data must be allocated and copied.
self.fail()
def update(self):
from datetime import datetime, timedelta
import pygame.image
while self.on:
start = datetime.now()
if self.cam.query_image():
# snapshot = self.cam.get_image()
# self.frame = list(pygame.image.tostring(snapshot, "RGB", False))
snapshot = self.cam.get_image()
snapshot1 = pygame.transform.scale(snapshot, self.resolution)
self.frame = pygame.surfarray.pixels3d(pygame.transform.rotate(pygame.transform.flip(snapshot1, True, False), 90))
stop = datetime.now()
s = 1 / self.framerate - (stop - start).total_seconds()
if s > 0:
time.sleep(s)
self.cam.stop()
def __init__(self, path_mask='~/d2/data/**/*.jpg'):
self.image_filenames = glob.glob(os.path.expanduser(path_mask), recursive=True)
def get_image_index(fnm):
sl = os.path.basename(fnm).split('_')
return int(sl[0])
'''
I feel like sorting by modified time is almost always
what you want. but if you tared and moved your data around,
sometimes it doesn't preserve a nice modified time.
so, sorting by image index works better, but only with one path.
'''
self.image_filenames.sort(key=get_image_index)
#self.image_filenames.sort(key=os.path.getmtime)
self.num_images = len(self.image_filenames)
print('%d images loaded.' % self.num_images)
print( self.image_filenames[:10])
self.i_frame = 0
self.frame = None
self.update()
def loadFromRpkg(self, path):
"""
Laden des Raums
Parameter: str Dateiname/Pfad des zuladenen Raums
Rückgabewerte: -
"""
try:
room = Pickle.load(open(path, "rb"))
except Exception as e:
print e
self.name = room[0]
self.col = room[1]
self.bg = pygame.image.fromstring(room[2], room[3], "RGB")
self.equippables = room[4]
self.doors = room[5]
def __init__(self):
self.coor = [0, 0]
self.direction = [0, 1]
self.img = pygame.image.load('res/robot.png')
self.img = pygame.transform.scale(
self.img, (2 * Maze.GRID_LEN, 2 * Maze.GRID_LEN))
self.loop = 0
self.moves = 0
self.movetime = 1
self.numExplored = 0
self.mark_explored()
self.short_path_cmd = [-1]
self.prev = False
self.stage = 0
self.uncalibrateMove = 0
self.is_goal_reach=0
def __init__(self):
self.coor = [0, 0]
self.direction = [0, 1]
self.img = pygame.image.load('res/robot.png')
self.img = pygame.transform.scale(
self.img, (2 * Maze.GRID_LEN, 2 * Maze.GRID_LEN))
self.loop = 0
self.moves = 0
self.movetime = 1
self.numExplored = 0
# comm=Com()
self.mark_explored()
self.short_path_cmd = [-1]
self.prev = False
self.stage = 0
self.uncalibrateMove = 0
self.actions=[]
self.is_goal_reach=0
def testLoadIcon(self):
""" see if we can load the pygame icon.
"""
f = pygame.pkgdata.getResource("pygame_icon.bmp")
self.assertEqual(f.mode, "rb")
surf = pygame.image.load_basic(f)
self.assertEqual(surf.get_at((0,0)),(5, 4, 5, 255))
self.assertEqual(surf.get_height(),32)
self.assertEqual(surf.get_width(),32)
def testLoadJPG(self):
""" see if we can load a jpg.
"""
f = example_path('data/alien1.jpg') # normalized
# f = os.path.join("examples", "data", "alien1.jpg")
surf = pygame.image.load(f)
f = open(f, "rb")
# f = open(os.path.join("examples", "data", "alien1.jpg"), "rb")
surf = pygame.image.load(f)
# surf = pygame.image.load(open(os.path.join("examples", "data", "alien1.jpg"), "rb"))
def testSavePNG32(self):
""" see if we can save a png with color values in the proper channels.
"""
# Create a PNG file with known colors
reddish_pixel = (215, 0, 0, 255)
greenish_pixel = (0, 225, 0, 255)
bluish_pixel = (0, 0, 235, 255)
greyish_pixel = (115, 125, 135, 145)
surf = pygame.Surface((1, 4), pygame.SRCALPHA, 32)
surf.set_at((0, 0), reddish_pixel)
surf.set_at((0, 1), greenish_pixel)
surf.set_at((0, 2), bluish_pixel)
surf.set_at((0, 3), greyish_pixel)
f_path = tempfile.mktemp(suffix='.png')
pygame.image.save(surf, f_path)
# Read the PNG file and verify that pygame saved it correctly
width, height, pixels, metadata = png.Reader(filename=f_path).asRGBA8()
pixels_as_tuples = []
for pixel in pixels:
pixels_as_tuples.append(tuple(pixel))
self.assertEquals(pixels_as_tuples[0], reddish_pixel)
self.assertEquals(pixels_as_tuples[1], greenish_pixel)
self.assertEquals(pixels_as_tuples[2], bluish_pixel)
self.assertEquals(pixels_as_tuples[3], greyish_pixel)
os.remove(f_path)
def test_save(self):
s = pygame.Surface((10,10))
s.fill((23,23,23))
magic_hex = {}
magic_hex['jpg'] = [0xff, 0xd8, 0xff, 0xe0]
magic_hex['png'] = [0x89 ,0x50 ,0x4e ,0x47]
magic_hex['tga'] = [0x0, 0x0, 0xa]
magic_hex['bmp'] = [0x42, 0x4d]
formats = ["jpg", "png", "tga", "bmp"]
# uppercase too... JPG
formats = formats + [x.upper() for x in formats]
for fmt in formats:
try:
temp_filename = "%s.%s" % ("tmpimg", fmt)
pygame.image.save(s, temp_filename)
# test the magic numbers at the start of the file to ensure they are saved
# as the correct file type.
self.assertEqual((1, fmt), (test_magic(open(temp_filename, "rb"), magic_hex[fmt.lower()]), fmt))
# load the file to make sure it was saved correctly.
# Note load can load a jpg saved with a .png file name.
s2 = pygame.image.load(temp_filename)
#compare contents, might only work reliably for png...
# but because it's all one color it seems to work with jpg.
self.assertEquals(s2.get_at((0,0)), s.get_at((0,0)))
finally:
#clean up the temp file, comment out to leave tmp file after run.
os.remove(temp_filename)
pass
def test_to_string__premultiplied(self):
""" test to make sure we can export a surface to a premultiplied alpha string
"""
def convertRGBAtoPremultiplied(surface_to_modify):
for x in xrange_(surface_to_modify.get_width()):
for y in xrange_(surface_to_modify.get_height()):
color = surface_to_modify.get_at((x, y))
premult_color = (color[0]*color[3]/255,
color[1]*color[3]/255,
color[2]*color[3]/255,
color[3])
surface_to_modify.set_at((x, y), premult_color)
test_surface = pygame.Surface((256, 256), pygame.SRCALPHA, 32)
for x in xrange_(test_surface.get_width()):
for y in xrange_(test_surface.get_height()):
i = x + y*test_surface.get_width()
test_surface.set_at((x,y), ((i*7) % 256, (i*13) % 256, (i*27) % 256, y))
premultiplied_copy = test_surface.copy()
convertRGBAtoPremultiplied(premultiplied_copy)
self.assertPremultipliedAreEqual(pygame.image.tostring(test_surface, "RGBA_PREMULT"),
pygame.image.tostring(premultiplied_copy, "RGBA"),
pygame.image.tostring(test_surface, "RGBA"))
self.assertPremultipliedAreEqual(pygame.image.tostring(test_surface, "ARGB_PREMULT"),
pygame.image.tostring(premultiplied_copy, "ARGB"),
pygame.image.tostring(test_surface, "ARGB"))
no_alpha_surface = pygame.Surface((256, 256), 0, 24)
self.assertRaises(ValueError, pygame.image.tostring, no_alpha_surface, "RGBA_PREMULT")
def todo_test_get_extended(self):
# __doc__ (as of 2008-08-02) for pygame.image.get_extended:
# pygame.image.get_extended(): return bool
# test if extended image formats can be loaded
#
# If pygame is built with extended image formats this function will
# return True. It is still not possible to determine which formats
# will be available, but generally you will be able to load them all.
self.fail()
def todo_test_load_extended(self):
# __doc__ (as of 2008-08-02) for pygame.image.load_extended:
# pygame module for image transfer
self.fail()
def todo_test_save_extended(self):
# __doc__ (as of 2008-08-02) for pygame.image.save_extended:
# pygame module for image transfer
self.fail()
def draw_background(imgName):
bg_image = pygame.image.load(imgName).convert()
bg_data = pygame.image.tostring(bg_image, 'RGBX', 1)
width, height = bg_image.get_size()
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glEnable(GL_TEXTURE_2D)
glGT = glGenTextures(1)
glBindTexture(GL_TEXTURE_2D, glGT)
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, bg_data)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
glBegin(GL_QUADS)
glTexCoord2f(0.0,0.0); glVertex3f(-1.0,-1.0,-1.0)
glTexCoord2f(1.0,0.0); glVertex3f( 1.0,-1.0,-1.0)
glTexCoord2f(1.0,1.0); glVertex3f( 1.0, 1.0,-1.0)
glTexCoord2f(0.0,1.0); glVertex3f(-1.0, 1.0,-1.0)
glEnd()
glDeleteTextures(1)
return glGT
def init(self, importMasse, importImage, importForces): #TODO check Hitbox management
#self.image.load(importImage, (0,0))
self.masse=importMasse
self.acceleration.init()
#self.hitbox.sizeX=
#self.hitbox.sizeY=
#self.gravityCenterX= usefull ?
#self.gravityCenterY= usefull ?
def __init__(self, resolution=(160, 120), image=None):
if image is not None:
self.frame = image
else:
self.frame = Image.new('RGB', resolution)
def checkdependencies():
"only returns if everything looks ok"
msgs = []
#make sure this looks like the right directory
if not os.path.isdir(CODEDIR):
msgs.append('Cannot locate SolarWolf modules')
if not os.path.isdir('data'):
msgs.append('Cannot locate SolarWolf data files')
#first, we need python >= 2.1
if int(sys.version[0]) < 2:
errorbox('Requires Python-2.1 or Greater')
#is correct pygame found?
try:
import pygame
if pygame.ver < '1.5.6':
msgs.append('Requires Pygame-1.5.6 or Greater, You Have ' + pygame.ver)
except ImportError:
msgs.append("Cannot import Pygame, install version 1.5.6 or higher")
pygame = None
#check that we have FONT and IMAGE
if pygame:
if not pygame.font:
msgs.append('Pygame requires the SDL_ttf library, not available')
if not pygame.image or not pygame.image.get_extended():
msgs.append('Pygame requires the SDL_image library, not available')
if msgs:
msg = '\n'.join(msgs)
errorbox(msg)
#Pretty Error Handling Code...
def load_raw(name):
file = game.get_resource(name)
img = pygame.image.load(file)
return img
def testLoadIcon(self):
""" see if we can load the pygame icon.
"""
f = pygame.pkgdata.getResource("pygame_icon.bmp")
self.assertEqual(f.mode, "rb")
surf = pygame.image.load_basic(f)
self.assertEqual(surf.get_at((0,0)),(5, 4, 5, 255))
self.assertEqual(surf.get_height(),32)
self.assertEqual(surf.get_width(),32)
def testLoadPNG(self):
""" see if we can load a png.
"""
f = example_path('data/alien1.png') # normalized
# f = os.path.join("examples", "data", "alien1.png")
surf = pygame.image.load(f)
f = open(f, 'rb')
# f = open(os.path.join("examples", "data", "alien1.png"), "rb")
surf = pygame.image.load(f)
def testLoadJPG(self):
""" see if we can load a jpg.
"""
f = example_path('data/alien1.jpg') # normalized
# f = os.path.join("examples", "data", "alien1.jpg")
surf = pygame.image.load(f)
f = open(f, "rb")
# f = open(os.path.join("examples", "data", "alien1.jpg"), "rb")
surf = pygame.image.load(f)
# surf = pygame.image.load(open(os.path.join("examples", "data", "alien1.jpg"), "rb"))
def test_save(self):
s = pygame.Surface((10,10))
s.fill((23,23,23))
magic_hex = {}
magic_hex['jpg'] = [0xff, 0xd8, 0xff, 0xe0]
magic_hex['png'] = [0x89 ,0x50 ,0x4e ,0x47]
magic_hex['tga'] = [0x0, 0x0, 0xa]
magic_hex['bmp'] = [0x42, 0x4d]
formats = ["jpg", "png", "tga", "bmp"]
# uppercase too... JPG
formats = formats + [x.upper() for x in formats]
for fmt in formats:
try:
temp_filename = "%s.%s" % ("tmpimg", fmt)
pygame.image.save(s, temp_filename)
# test the magic numbers at the start of the file to ensure they are saved
# as the correct file type.
self.assertEqual((1, fmt), (test_magic(open(temp_filename, "rb"), magic_hex[fmt.lower()]), fmt))
# load the file to make sure it was saved correctly.
# Note load can load a jpg saved with a .png file name.
s2 = pygame.image.load(temp_filename)
#compare contents, might only work reliably for png...
# but because it's all one color it seems to work with jpg.
self.assertEquals(s2.get_at((0,0)), s.get_at((0,0)))
finally:
#clean up the temp file, comment out to leave tmp file after run.
os.remove(temp_filename)
pass
def test_to_string__premultiplied(self):
""" test to make sure we can export a surface to a premultiplied alpha string
"""
def convertRGBAtoPremultiplied(surface_to_modify):
for x in xrange_(surface_to_modify.get_width()):
for y in xrange_(surface_to_modify.get_height()):
color = surface_to_modify.get_at((x, y))
premult_color = (color[0]*color[3]/255,
color[1]*color[3]/255,
color[2]*color[3]/255,
color[3])
surface_to_modify.set_at((x, y), premult_color)
test_surface = pygame.Surface((256, 256), pygame.SRCALPHA, 32)
for x in xrange_(test_surface.get_width()):
for y in xrange_(test_surface.get_height()):
i = x + y*test_surface.get_width()
test_surface.set_at((x,y), ((i*7) % 256, (i*13) % 256, (i*27) % 256, y))
premultiplied_copy = test_surface.copy()
convertRGBAtoPremultiplied(premultiplied_copy)
self.assertPremultipliedAreEqual(pygame.image.tostring(test_surface, "RGBA_PREMULT"),
pygame.image.tostring(premultiplied_copy, "RGBA"),
pygame.image.tostring(test_surface, "RGBA"))
self.assertPremultipliedAreEqual(pygame.image.tostring(test_surface, "ARGB_PREMULT"),
pygame.image.tostring(premultiplied_copy, "ARGB"),
pygame.image.tostring(test_surface, "ARGB"))
no_alpha_surface = pygame.Surface((256, 256), 0, 24)
self.assertRaises(ValueError, pygame.image.tostring, no_alpha_surface, "RGBA_PREMULT")
def todo_test_get_extended(self):
# __doc__ (as of 2008-08-02) for pygame.image.get_extended:
# pygame.image.get_extended(): return bool
# test if extended image formats can be loaded
#
# If pygame is built with extended image formats this function will
# return True. It is still not possible to determine which formats
# will be available, but generally you will be able to load them all.
self.fail()
def todo_test_load_basic(self):
# __doc__ (as of 2008-08-02) for pygame.image.load_basic:
# pygame.image.load(filename): return Surface
# pygame.image.load(fileobj, namehint=): return Surface
# load new image from a file
self.fail()
def todo_test_load_extended(self):
# __doc__ (as of 2008-08-02) for pygame.image.load_extended:
# pygame module for image transfer
self.fail()
def todo_test_save_extended(self):
# __doc__ (as of 2008-08-02) for pygame.image.save_extended:
# pygame module for image transfer
self.fail()
def generateRoomFromSource(self, name):
"""
Generieren des Raums aus Quelldateien
Parameter: str Name des Raums
Rückgabewerte: -
"""
self.name = name
self.col = gamemap.createByImage(name + "col.png")
print "self.col:", self.col
self.bg = pygame.image.load(name + ".png")
self.saveToRpkg()