def test_ImageCreation(): '''String Tests''' #True tests assert buildWithString("tree", "tree") == True assert buildWithString("12345", "12345") == True assert buildWithString("voc@b", "voc@b") == True #False tests assert buildWithString("tree", "apple") == False assert buildWithString("12345", "17892") == False assert buildWithString("voc@b", "#xtra!") == False '''Hash Tests''' #True Tests assert buildWithHash(1, 1) == True assert buildWithHash(23, 23) == True assert buildWithHash(101, 101) == True #False Tests assert buildWithHash(1, 7) == False '''TODO: Fix these two hash tests, perhaps see what they generate''' assert buildWithHash(0, 1) == False assert buildWithHash(3, 2) == False '''Combination Tests''' imgTree1 = pagan.Avatar("Tree") imgTree2 = pagan.Avatar("Tree", 0) imgFalse1 = pagan.Avatar("Tree", 1) imgFalse2 = pagan.Avatar("Tree", 3) assert imgTree1.img == imgTree2.img assert imgFalse1.img != imgFalse2.img
def test_create(): img0 = pagan.Avatar("") img1 = pagan.Avatar("", 0) img2 = pagan.Avatar("", -111) img3 = pagan.Avatar("", None) assert img2.img == img3.img assert img0.img == img1.img
def buildWithHash(numOne, numTwo): #Create two images with the same string using passed in numbers img = pagan.Avatar("", numOne) img2 = pagan.Avatar("", numTwo) #Compate the images using the .img format if (img.img == img2.img): return True else: return False
def buildWithString(stringOne, stringTwo): #Create two images from the two strings img = pagan.Avatar(stringOne) img2 = pagan.Avatar(stringTwo) #compare the two images (Must use .img format to compare them) if (img.img == img2.img): return True else: return False
def test_ImageChange(): '''Change Image Test''' #True Tests imgOne = pagan.Avatar("1") imgZero = pagan.Avatar("0") assert imgOne.img != imgZero.img imgZero.change("1") assert imgZero.img == imgOne.img #False Tests imgOne = pagan.Avatar("Chicken") imgZero = pagan.Avatar("Chicken") assert imgOne.img == imgZero.img imgZero.change("Egg") assert imgZero.img != imgOne.img
def hashimage(hashvalue): """generate image by hash, uses tempfile :-/""" tmpf = tempfile.mkstemp(".png")[1] image = pagan.Avatar("") image.img = pagan.generator.generate_by_hash(hashvalue) image.save("/", tmpf) return static_file(tmpf, root="/")
def generate_users(count): users = [] for i in range(count): name = fake.name() email = fake.email() password = fake.name() location = ', '.join((fake.address(), fake.city(), fake.country())) bio = fake.text() avatar = pagan.Avatar(name) temp = io.BytesIO() avatar.img.save(temp, format='gif') users.append((email, password)) result = requests.post(ENDPOINT + 'users/', data={ 'name': name, 'email': email, 'password': password, 'location': location, 'bio': bio, }, files={ 'avatar': ('image.gif', temp.getvalue()), }) check_result(result, 'Created user ' + name) return users
def test_save(): img0 = pagan.Avatar("1") tmpdir = tempfile.gettempdir() tmpfile = tempfile.mkstemp(".png", dir=tmpdir)[1] img0.save("/", tmpfile) img0.save(tmpdir, tmpfile) tmpfile = tempfile.mkstemp("", dir=tmpdir)[1] img0.save("/", tmpfile) img0.save(tmpdir, tmpfile)
def hashimage(hashvalue): """generate image by hash, usese tempfile :-/""" tmpf = tempfile.mkstemp(".png")[1] print(tmpf) print(hashvalue) image = pagan.Avatar("") image.img = pagan.generator.generate_by_hash(hashvalue) image.save("/", tmpf) return static_file(hashvalue + ".png", root="C:/Users/Alberto/AppData/Local/Temp")
def register(): schema = { Required('name'): All(Match(r'^[a-zA-Z0-9_.-]+$', msg='username has invalid symbol'), Length(min=1, max=30, msg='username too long')), Required('nickname'): All( str, Length(min=1, max=30, msg='nickname too long'), ), Required('email'): All(Email(), msg='bad email format'), Required('password'): All( str, Length(min=6, msg='password less then 6 letters'), ), } payload = retrieve_payload(schema) user = User.query.filter_by(name=payload['name']).first() if user: raise ConflictException(desc='username already used') user = User.query.filter_by(email=payload['email']).first() if user: raise ConflictException(desc='email already used') avatar = pagan.Avatar(payload['name'], pagan.SHA512) upload_folder = current_app.config['UPLOAD_FOLDER'] filepath = os.path.join('avatar', uuid4().hex[:8]) avatar.save(os.path.join(upload_folder, filepath), '_.png') avatar_path = '/' + os.path.join('upload', filepath, '_.png') user = User( role=User.ROLE_USER, name=payload['name'], nickname=payload['nickname'], email=payload['email'], avatar=avatar_path, ) user.password = payload['password'] with db.auto_commit(): db.session.add(user) confirm_url = 'https://morio.cc/confirm?token={}'.format( user.gen_email_token()) mailgun.send_mail.delay( user.email, 'Welcome to Morio', html=render_template('email/confirm.html', url=confirm_url), ) resp = jsonify(user) resp.headers['Authorization'] = user.gen_auth_token() return resp
def generate_avatar(self, hash=None): """ Generate a avatar from a random hash Returns a bytesIO object """ if not hash: hash = secrets.token_urlsafe(16) avatar = pagan.Avatar(hash, pagan.SHA512) bio = io.BytesIO() avatar.img.save(bio, format='PNG') bio.seek(0) return bio
def fetch_player_avatar(player, avatar_fname): if player.avatar_url: # download avatar r = requests.get(player.avatar_url, stream=True) if r.status_code == 200: with open(avatar_fname, 'wb') as f: r.raw.decode_content = True shutil.copyfileobj(r.raw, f) return # generate a pagan avatar avatar = pagan.Avatar(player.name.encode('utf-8'), pagan.SHA512) scaled = avatar.img scaled.thumbnail((80, 80)) scaled.save(avatar_fname, 'PNG')
def fake_command(): from faker import Factory fake = Factory.create() users = [] db.drop_all() db.create_all() for i in range(100): name = fake.name() password = fake.pystr(min_chars=6, max_chars=20) email = fake.email() username = fake.user_name() sign_up_time = fake.date_time_this_year(before_now=True, after_now=False, tzinfo=None) avatar_img = pagan.Avatar(username, pagan.SHA512) avatar = 'static/avatar/' + username + '.png' avatar_img.save(os.path.join(app.root_path, 'static/avatar/'), username) u = User() u._create(username, password, name, email, sign_up_time, avatar) db.session.add(u) db.session.commit() users.append(u) # create 10 posts every user for _ in range(10): p = Post() title = fake.sentence(nb_words=6, variable_nb_words=True) content = fake.paragraph(nb_sentences=5, variable_nb_sentences=True) published_time = fake.date_time_this_year(before_now=True, after_now=False, tzinfo=None) p._create(title, content, published_time, u) db.session.add(p) db.session.commit() for user in users: count = 0 while count < 10: i = random.randint(0, len(users) - 1) if users[i] != user and not users[i] in user.following: user.following.append(users[i]) count += 1 #users[0].following.append(users[1]) #users[1].following.append(users[0]) db.session.commit()
def dashboard(request): # Generate avatar base64 avatar = pagan.Avatar(request.user.username, pagan.SHA512) buffered = BytesIO() avatar.img.save(buffered, format='PNG') avatar_base64 = base64.b64encode(buffered.getvalue()).decode('ascii') context = { 'missions': Mission.objects.filter(end_time__gte=timezone.now()).exclude( completedmission__user=request.user).order_by('start_time'), 'completed_missions': Mission.objects.filter(completedmission__user=request.user), 'grade': request.user.grade, 'avatar_base64': avatar_base64 } return render(request, 'spiritdashboard/dashboard.html', context=context)
def generate_agent_avatars(): # Defining the directory to save the avatars images path = os.path.abspath(os.path.dirname(__file__)) + '/static' # Checking for existing avatars in directory files = os.listdir(path) # Querying agents agents = AgentModel.query.all() for a in agents: # Converting the agent object to string (agent name) name = str(a) name = name[6:-17] if any(name in s for s in files): # If any avatar image with the agent name already exists # then nothing is necessary pass else: # If no avatar image with the agent name was found # then one is created img = pagan.Avatar(name, pagan.SHA512) img.save(path, name)
import pagan input = "Python" img = pagan.Avatar(input, pagan.SHA384) img.show() img.save(path='imgs/', filename=f'{input}.png') img.change(str(input), pagan.SHA384)
import pagan input_name = 'blog' img = pagan.Avatar(input_name, pagan.SHA512) img.show() out_path = 'output/' filename = input_name img.save(out_path, filename)
#!/usr/bin/env python import sys import tensorflow as tf import cv2 import pagan if len(sys.argv) != 2: print('Usage: {} <id>'.format(argv[0])) exit(1) img_data = cv2.imread('cit.jpg') image = tf.constant(img_data) result = tf.reduce_mean(tf.log(image)) with tf.Session() as sess: value = sess.run(result) avatar = pagan.Avatar(str(value), pagan.SHA512) avatar.save('/data_cifs/bnavetta', 'test-' + sys.argv[1])
def get(self, request, *args, **kwargs): # pylint: disable=too-many-branches,too-many-statements,too-many-locals,too-many-return-statements ''' Override get from parent class ''' model = ConfirmedEmail size = get_size(request) imgformat = 'png' obj = None default = None forcedefault = False gravatarredirect = False gravatarproxy = True uri = request.build_absolute_uri() # Check the cache first if CACHE_RESPONSE: centry = caches['filesystem'].get(uri) if centry: # For DEBUG purpose only print('Cached entry for %s' % uri) return HttpResponse( centry['content'], content_type=centry['content_type'], status=centry['status'], reason = centry['reason'], charset = centry['charset']) # In case no digest at all is provided, return to home page if not 'digest' in kwargs: return HttpResponseRedirect(reverse_lazy('home')) if 'd' in request.GET: default = request.GET['d'] if 'default' in request.GET: default = request.GET['default'] if 'f' in request.GET: if request.GET['f'] == 'y': forcedefault = True if 'forcedefault' in request.GET: if request.GET['forcedefault'] == 'y': forcedefault = True if 'gravatarredirect' in request.GET: if request.GET['gravatarredirect'] == 'y': gravatarredirect = True if 'gravatarproxy' in request.GET: if request.GET['gravatarproxy'] == 'n': gravatarproxy = False try: obj = model.objects.get(digest=kwargs['digest']) except ObjectDoesNotExist: try: obj = model.objects.get(digest_sha256=kwargs['digest']) except ObjectDoesNotExist: model = ConfirmedOpenId try: d = kwargs['digest'] # OpenID is tricky. http vs. https, versus trailing slash or not # However, some users eventually have added their variations already # and therfore we need to use filter() and first() obj = model.objects.filter( Q(digest=d) | Q(alt_digest1=d) | Q(alt_digest2=d) | Q(alt_digest3=d)).first() except: pass # If that mail/openid doesn't exist, or has no photo linked to it if not obj or not obj.photo or forcedefault: gravatar_url = 'https://secure.gravatar.com/avatar/' + kwargs['digest'] \ + '?s=%i' % size # If we have redirection to Gravatar enabled, this overrides all # default= settings, except forcedefault! if gravatarredirect and not forcedefault: return HttpResponseRedirect(gravatar_url) # Request to proxy Gravatar image - only if not forcedefault if gravatarproxy and not forcedefault: url = reverse_lazy('gravatarproxy', args=[kwargs['digest']]) \ + '?s=%i' % size + '&default=%s' % default return HttpResponseRedirect(url) # Return the default URL, as specified, or 404 Not Found, if default=404 if default: # Proxy to gravatar to generate wavatar - lazy me if str(default) == 'wavatar': url = reverse_lazy('gravatarproxy', args=[kwargs['digest']]) \ + '?s=%i' % size + '&default=%s&f=y' % default return HttpResponseRedirect(url) if str(default) == str(404): return HttpResponseNotFound(_('<h1>Image not found</h1>')) if str(default) == 'monsterid': monsterdata = BuildMonster(seed=kwargs['digest'], size=(size, size)) data = BytesIO() monsterdata.save(data, 'PNG', quality=JPEG_QUALITY) data.seek(0) response = CachingHttpResponse( uri, data, content_type='image/png') response['Cache-Control'] = 'max-age=%i' % CACHE_IMAGES_MAX_AGE return response if str(default) == 'robohash': roboset = 'any' if request.GET.get('robohash'): roboset = request.GET.get('robohash') robohash = Robohash(kwargs['digest']) robohash.assemble(roboset=roboset, sizex=size, sizey=size) data = BytesIO() robohash.img.save(data, format='png') data.seek(0) response = CachingHttpResponse( uri, data, content_type='image/png') response['Cache-Control'] = 'max-age=%i' % CACHE_IMAGES_MAX_AGE return response if str(default) == 'retro': identicon = Identicon.render(kwargs['digest']) data = BytesIO() img = Image.open(BytesIO(identicon)) img = img.resize((size, size), Image.ANTIALIAS) img.save(data, 'PNG', quality=JPEG_QUALITY) data.seek(0) response = CachingHttpResponse( uri, data, content_type='image/png') response['Cache-Control'] = 'max-age=%i' % CACHE_IMAGES_MAX_AGE return response if str(default) == 'pagan': paganobj = pagan.Avatar(kwargs['digest']) data = BytesIO() img = paganobj.img.resize((size, size), Image.ANTIALIAS) img.save(data, 'PNG', quality=JPEG_QUALITY) data.seek(0) response = CachingHttpResponse( uri, data, content_type='image/png') response['Cache-Control'] = 'max-age=%i' % CACHE_IMAGES_MAX_AGE return response if str(default) == 'identicon': p = Pydenticon5() # In order to make use of the whole 32 bytes digest, we need to redigest them. newdigest = hashlib.md5(bytes(kwargs['digest'], 'utf-8')).hexdigest() img = p.draw(newdigest, size, 0) data = BytesIO() img.save(data, 'PNG', quality=JPEG_QUALITY) data.seek(0) response = CachingHttpResponse( uri, data, content_type='image/png') response['Cache-Control'] = 'max-age=%i' % CACHE_IMAGES_MAX_AGE return response if str(default) == 'mm' or str(default) == 'mp': # If mm is explicitly given, we need to catch that static_img = path.join('static', 'img', 'mm', '%s%s' % (str(size), '.png')) if not path.isfile(static_img): # We trust this exists!!! static_img = path.join('static', 'img', 'mm', '512.png') # We trust static/ is mapped to /static/ return HttpResponseRedirect('/' + static_img) return HttpResponseRedirect(default) static_img = path.join('static', 'img', 'nobody', '%s%s' % (str(size), '.png')) if not path.isfile(static_img): # We trust this exists!!! static_img = path.join('static', 'img', 'nobody', '512.png') # We trust static/ is mapped to /static/ return HttpResponseRedirect('/' + static_img) imgformat = obj.photo.format photodata = Image.open(BytesIO(obj.photo.data)) # If the image is smaller than what was requested, we need # to use the function resize if photodata.size[0] < size or photodata.size[1] < size: photodata = photodata.resize((size, size), Image.ANTIALIAS) else: photodata.thumbnail((size, size), Image.ANTIALIAS) data = BytesIO() photodata.save(data, pil_format(imgformat), quality=JPEG_QUALITY) data.seek(0) obj.photo.access_count += 1 obj.photo.save() obj.access_count += 1 obj.save() if imgformat == 'jpg': imgformat = 'jpeg' response = CachingHttpResponse( uri, data, content_type='image/%s' % imgformat) response['Cache-Control'] = 'max-age=%i' % CACHE_IMAGES_MAX_AGE return response
def test_show(): """check only if error is raised""" img0 = pagan.Avatar("You rock!") img0.show()
def generate_profile_picture(): img = pagan.Avatar(generate_random_key(), pagan.SHA512) return img
for i in range(1, 250000): fn = person.full_name() m = fn.translate(tr).replace(" ", ".") userName = m mail = m + "@" + mailDomain imageString = "" if usePhoto: avatarUrl = person.avatar() r = requests.get(avatarUrl) imageString = "" if r.status_code == 200: imageString = base64.b64encode(r.content).decode("utf-8") else: img = pagan.Avatar(userName, pagan.SHA512) img.save('.\\', 't') with open(".\\t.png", "rb") as binary_file: dataImage = binary_file.read() imageString = base64.b64encode(dataImage).decode("utf-8") entry = { 'cn': fn, 'name': userName, 'displayName': fn, 'mail': mail, 'givenName': fn[:fn.find(' ')], 'title': person.occupation(), "mobile": person.telephone(), "sAMAccountName": userName, "company": domain,
def test_diffrent_hash(): img0 = pagan.Avatar("", 0) img1 = pagan.Avatar("", 1) assert img0.img != img1.img
def get_hash_img(value=None): if value is None or len(value) <= 0: im = Image.open("app/static/stare.png") return serve_pil_image(im) p = pagan.Avatar(value, pagan.SHA256) return serve_pil_image(p.img)
def test_change(): img0 = pagan.Avatar("1") img1 = pagan.Avatar("0") assert img0.img != img1.img img0.change("0") assert img0.img == img1.img
# -*- coding: utf-8 -*- """图像生成 workon test_env """ import pagan inpt = 'leeing' img = pagan.Avatar(inpt, pagan.SHA512) img.save('./', 'test')
def test_umlaute(): img0 = pagan.Avatar("äöüÄÖÜß") img1 = pagan.Avatar("äöüÄÖÜß", 4) assert img0.img != img1.img