Metadata-Version: 2.1
Name: spriteutil-masternhat
Version: 1.0.1
Summary: Sprite detection package
Home-page: https://github.com/intek-training-jsc/sprite-detection-masternhat
Author: Le Quang Nhat
Author-email: nhat.le@f4.intek.edu.vn
License: MIT
Description: <h1 style="text-align: center;">Sprite Detection</h1>
        
        <img src="optimized_sprite_sheet.png" width=50%, height=50%><img src="optimized_sprite_sheet_bounding_box_white_background.png" width=50%, height=50%>
        
        
        ### Features
        
        - [x] Find the Most Common Color in an Image.
        - [x] Find Sprites in an Image.
        - [x] Draw Sprite Label Bounding Boxes.
        
        ### Why this project is useful?
        
        - Used reasonable library for process Image.
        - Can be used on a big image.
        - Easy to understand.
        
        ### Usage
        
        - Find the Most Common Color in an Image
        
        ```python
        >>> from PIL import Image
        # JPEG image
        >>> image = Image.open('first_image.jpg')
        >>> image.mode
        'RGB'
        >>> find_most_common_color(image)
        (0, 221, 204)
        # PNG image
        >>> image = Image.open('second_image.png')
        >>> image.mode
        'RGBA'
        >>> find_most_common_color(image)
        (0, 0, 0, 0)
        # Grayscale image
        >>> image = image.convert('L')
        >>> image.mode
        'L'
        >>> find_most_common_color(image)
        0
        ```
        
        - Find Sprites in an Image.
        
        <img src="metal_slug_single_sprite_large.png" width=50%, height=50%>
        
        ```python
        >>> from PIL import Image
        >>> image = Image.open('metal_slug_single_sprite.png')
        >>> sprites, label_map = find_sprites(image, background_color=(255, 255, 255))
        >>> len(sprites)
        1
        >>> for label, sprite in sprites.items():
        ...     print(f"Sprite ({label}): [{sprite.top_left}, {sprite.bottom_right}] {sprite.width}x{sprite.height}")
        Sprite (1): [(0, 0), (29, 37)] 30x38
        >>> import pprint
        >>> pprint.pprint(label_map, width=120)
        [[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0],
         [0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0],
         [0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0],
         [0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],
         [0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0],
         [0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0],
         [0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0],
         [0,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0],
         [0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],
         [0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0],
         [0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0],
         [0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0],
         [0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0],
         [0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
         [0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0],
         [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0],
         [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
         [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
         [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],
         [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0],
         [0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0],
         [0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0],
         [0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0],
         [0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
         [0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
         [0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1],
         [0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,0],
         [0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,0,0],
         [0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0],
         [0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0],
         [0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0],
         [0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0],
         [0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
         [0,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
         [0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
         [1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0],
         [1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],
         [1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0]]
        ```
        Other example with the following image:
        
        <img src="optimized_sprite_sheet.png" width=50%, height=50%>
        
        ```python
        >>> from PIL import Image
        >>> image = Image.open('optimized_sprite_sheet.png')
        >>> sprites, label_map = find_sprites(image)
        >>> len(sprites)
        22
        >>> for label, sprite in sprites.items():
        ...     print(f"Sprite ({label}): [{sprite.top_left}, {sprite.bottom_right}] {sprite.width}x{sprite.height}")
        Sprite (25): [(383, 1), (455, 102)] 73x102
        Sprite (43): [(9, 2), (97, 122)] 89x121
        Sprite (26): [(110, 4), (195, 123)] 86x120
        Sprite (46): [(207, 4), (291, 123)] 85x120
        Sprite (16): [(305, 8), (379, 123)] 75x116
        Sprite (53): [(349, 125), (431, 229)] 83x105
        Sprite (61): [(285, 126), (330, 181)] 46x56
        Sprite (100): [(1, 129), (101, 237)] 101x109
        Sprite (106): [(106, 129), (193, 249)] 88x121
        Sprite (93): [(183, 137), (278, 241)] 96x105
        Sprite (95): [(268, 173), (355, 261)] 88x89
        Sprite (178): [(6, 244), (101, 348)] 96x105
        Sprite (185): [(145, 247), (245, 355)] 101x109
        Sprite (141): [(343, 257), (417, 372)] 75x116
        Sprite (169): [(102, 262), (142, 303)] 41x42
        Sprite (188): [(249, 267), (344, 373)] 96x107
        Sprite (192): [(412, 337), (448, 372)] 37x36
        Sprite (256): [(89, 353), (184, 459)] 96x107
        Sprite (234): [(11, 356), (104, 461)] 94x106
        Sprite (207): [(188, 358), (281, 463)] 94x106
        Sprite (229): [(384, 374), (456, 475)] 73x102
        Sprite (248): [(286, 378), (368, 482)] 83x105
        ```
        
        - Draw Sprite Label Bounding Boxes.
        
        ```python
        >>> from PIL import Image
        >>> image = Image.open('optimized_sprite_sheet.png')
        >>> sprites, label_map = find_sprites(image)
        >>> # Draw sprite masks and bounding boxes with the default white background color.
        >>> sprite_label_image = create_sprite_labels_image(sprites, label_map)
        >>> sprite_label_image.save('optimized_sprite_sheet_bounding_box_white_background.png')
        >>> # Draw sprite masks and bounding boxes with a transparent background color.
        >>> sprite_label_image = create_sprite_labels_image(sprites, label_map, background_color=(0, 0, 0, 0))
        >>> sprite_label_image.save('optimized_sprite_sheet_bounding_box_transparent_background.png')
        ```
        
        | Sprite Masks with White Background    | Sprite Masks with Transparent Background  |
        | ------------------------------------------------------------- | ------------------------------------------------------------------- |
        | <img src="optimized_sprite_sheet_bounding_box_white_background.png" width=100%, height=100%>|<img src="optimized_sprite_sheet_bounding_box_transparent_background.png" width=100%, height=100%>|
        
        
        ### Built with
        - [Pillow](https://pillow.readthedocs.io/en/stable/)
        - [Numpy](https://numpy.org/devdocs/user/quickstart.html)
        
        
        ### Authors
        - Le Quang Nhat (masternhat) - Intek student - Developer
        
        
        ### Pull requests welcome!
        Spotted an error? Something doesn't make sense? Send me a [pull
        request](https://github.com/intek-training-jsc/sprite-detection-masternhat/pulls)!
        
        
        ### Support
        Ask your question here: <https://www.google.com/>
        
        ### Everyone can Maintains && Contributing
        
        Just follow steps:
        
        1. Fork it (<https://github.com/intek-training-jsc/sprite-detection-masternhat.git>)
        2. Create your feature branch (`git checkout -b feature/fooBar`)
        3. Commit your changes (`git commit -am 'Add some fooBar'`)
        4. Push to the branch (`git push origin feature/fooBar`)
        5. Create a new Pull Request
        
        ## License
        
        This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.6
Description-Content-Type: text/markdown
