プログラミング言語「Python」で制作 Part120 | Photoshop CC Tutorials

今回はプログラミング言語の「Python」を使って作成しました。

 

下記の本の「モザイクのサンプル」を改造しました。

 

■ プログラム

import sys
import pygame
from pygame.locals import QUIT

pygame.init()
displayXY = 250
SURFACE = pygame.display.set_mode((displayXY, displayXY))
FPSCLOCK = pygame.time.Clock()

rectangle = 250
def process_pixels(src_data, dst_data):
    """ process pixels """
    for ypos in range(0, displayXY, rectangle):
        for xpos in range(0, displayXY, rectangle):
            r_total, g_total, b_total = 0, 0, 0

            for y_offset in range(ypos, ypos+rectangle):
                for x_offset in range(xpos, xpos+rectangle):
                    val = src_data[x_offset][y_offset]
                    rval, gval, bval, _ = SURFACE.unmap_rgb(val)
                    r_total += rval
                    g_total += gval
                    b_total += bval
            rectangle_02 = rectangle * rectangle
            rval = int(r_total / rectangle_02)
            gval = int(g_total / rectangle_02)
            bval = int(b_total / rectangle_02)
            for y_offset in range(ypos, ypos+rectangle):
                for x_offset in range(xpos, xpos+rectangle):
                    dst_data[x_offset][y_offset] = (rval, gval, bval)

def main():
    global rectangle

    """ main routine """
    src = pygame.image.load("picture0.jpg").convert()
    dst = pygame.Surface((displayXY, displayXY))

    while True:
        for _ in pygame.event.get(QUIT):
            pygame.quit()
            sys.exit()

        if pygame.time.get_ticks() >= 1000 and pygame.time.get_ticks() < 2000:
            rectangle = 250
        elif pygame.time.get_ticks() >= 2000 and pygame.time.get_ticks() < 3000:
            rectangle = 125
        elif pygame.time.get_ticks() >= 3000 and pygame.time.get_ticks() < 4000:
            rectangle = 50
        elif pygame.time.get_ticks() >= 4000 and pygame.time.get_ticks() < 5000:
            rectangle = 25
        elif pygame.time.get_ticks() >= 5000 and pygame.time.get_ticks() < 6000:
            rectangle = 10
        elif pygame.time.get_ticks() >= 6000 and pygame.time.get_ticks() < 7000:
            rectangle = 5
        elif pygame.time.get_ticks() >= 7000 and pygame.time.get_ticks() < 8000:
            rectangle = 2
        elif pygame.time.get_ticks() >= 8000:
            rectangle = 1

        SURFACE.blit(dst, (0, 0))
        src_data = pygame.PixelArray(src)
        dst_data = pygame.PixelArray(dst)
        process_pixels(src_data, dst_data)
        del src_data
        del dst_data

        pygame.display.update()
        FPSCLOCK.tick(5)

if __name__ == '__main__':
    main()

 

■ 参考書

「Pythonゲームプログラミング 知っておきたい数学と物理の基本 (Future Coders(NextPublishing))」

 

■ ゲーム用ライブラリ

「Pygame」

 

■ プログラミング言語

「Python」