الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

class لتوليد صور الـbmp في بايثون

بدأه Mr.B في 1 نوفمبر 2013 · 1 رد · 595 مشاهدة · في لغة Python
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لسلام عليكم

هذا class خفيف لتوليد صور الـbmp 24 بت بأقل من ثلاثين سطر باستخدام بايثون:

import struct

class Bmp(object):
  def __init__(self, width, height, red=255, green=255, blue=255):
    self._pixel = [[self._encode_rgb(red, green, blue)] * width for i in range(height)]
    header_size = 54 + (width * 3 + (width & 3)) * height
    self._header = 'BM' + struct.pack('<III', header_size, 0, 54)
    self._info = struct.pack('<IIIHH', 40, width, height, 1, 24) + '\0\0\0\0' * 6

  def _encode_rgb(self, red, green, blue):
    return (red & 0xff) << 16 | (green & 0xff) << 8 | blue & 0xff

  def _decode_rgb(self, color):
    return (color & 0xff, (color >> 8) & 0xff, (color >> 16) & 0xff)

  def set_pixel(self, x, y, red, green, blue):
    self._pixel[y][x] = self._encode_rgb(red, green, blue)

  def get_pixel(self, x, y):
    return self._decode_rgb(self._pixel[y][x])

  def write_file(self, filename):
    with open(filename, 'wb') as bmp:
      bmp.write(self._header)
      bmp.write(self._info)
      for row in self._pixel[::-1]:
        bmp.write(''.join(struct.pack('3B', *self._decode_rgb(p)) for p in row))
        bmp.write('\0' * (len(self._pixel[0]) & 3))

طريقة الإستخدام بسيطة:
 

__init__(self, width, height, red=255, green=255, blue=255)

البناء، يستقبل 5 متغيرات:
width : عرض الصورة في البكسل.
height : ارتفاع الصورة في البكسل.
لون خلفية الصورة بنظام الـRGB، اللون الأحمر red (افتراضياً 255)، الأخضر green (افتراضياً 255)، الأزرق blue (افتراضياً 255).
 

get_pixel(self, x, y)

الحصول على لون بكسل معين:
x : الإحداثي السيني، يبدأ من صفر وينتهي بعرض الصورة - 1.
y : الإحداثي الصادي، يبدأ من صفر وينتهي بإرتفاع الصورة - 1.
 

set_pixel(self, x, y, red, green, blue)

تحديد لون بكسل معين:
x : الإحداثي السيني.
y : الإحداثي الصادي.
اللون، أحمر red أحضر green أزرق blue.
 

write_file(self, filename)

لكتابة الصورة لملف:
filename: اسم الملف.


أمثلة، إنشاء صورة فارغة أبعادها 100×100 وبلون أزرق غامق:

bmp = Bmp(100, 100, 36, 73, 126)bmp.write_file('out.bmp')

النتيجة:

post-231926-0-10906900-1383306600.png

إنشاء صورة فارغة 100×100 بالخلفية الإفتراضية، أبيض وإعطاء لون عشوائي لكل بكسل:

from random import randrange

bmp = Bmp(100, 100)

for x in range(100):
  for y in range(100):
    bmp.set_pixel(x, y, randrange(256), randrange(256), randrange(256))

bmp.write_file('out.bmp')

النتيجة:
post-231926-0-71003400-1383306620.png


رسم خط من النقطة (0،0) إلى (100،100):

bmp = Bmp(100, 100, 50, 50, 50)

x1, y1 = 0, 0
x2, y2 = 99, 99

deltax = x2 - x1
deltay = y2 - y1

p = 2 * deltay - deltax

for x in xrange(x1, x2):
  if p >= 0:
    y1 += 1
    bmp.set_pixel(x, y1, 255, 255, 255)
    p = p + 2 * deltay - 2 * deltax
  else:
    bmp.set_pixel(x, y1, 255, 255, 255)
    p = p + 2 * deltay

bmp.write_file('out.bmp')

النتيجة:
post-231926-0-43904600-1383306642.png

بالتوفيق

1
#2

مشكور أخي و لكن لم قمت بشرح العملية لكان أفضل

أضخم دورة تعليم إختبار الإختراق في العالم العربي


هاكركاديمي


نصلح ما أفسده المخربون

مواضيع مشابهة