__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
#
# The Python Imaging Library.
#
# MSP file handling
#
# This is the format used by the Paint program in Windows 1 and 2.
#
# History:
# 95-09-05 fl Created
# 97-01-03 fl Read/write MSP images
# 17-02-21 es Fixed RLE interpretation
#
# Copyright (c) Secret Labs AB 1997.
# Copyright (c) Fredrik Lundh 1995-97.
# Copyright (c) Eric Soroos 2017.
#
# See the README file for information on usage and redistribution.
#
# More info on this format: https://archive.org/details/gg243631
# Page 313:
# Figure 205. Windows Paint Version 1: "DanM" Format
# Figure 206. Windows Paint Version 2: "LinS" Format. Used in Windows V2.03
#
# See also: https://www.fileformat.info/format/mspaint/egff.htm
from __future__ import annotations
import io
import struct
from typing import IO
from . import Image, ImageFile
from ._binary import i16le as i16
from ._binary import o16le as o16
#
# read MSP files
def _accept(prefix: bytes) -> bool:
return prefix[:4] in [b"DanM", b"LinS"]
##
# Image plugin for Windows MSP images. This plugin supports both
# uncompressed (Windows 1.0).
class MspImageFile(ImageFile.ImageFile):
format = "MSP"
format_description = "Windows Paint"
def _open(self) -> None:
# Header
assert self.fp is not None
s = self.fp.read(32)
if not _accept(s):
msg = "not an MSP file"
raise SyntaxError(msg)
# Header checksum
checksum = 0
for i in range(0, 32, 2):
checksum = checksum ^ i16(s, i)
if checksum != 0:
msg = "bad MSP checksum"
raise SyntaxError(msg)
self._mode = "1"
self._size = i16(s, 4), i16(s, 6)
if s[:4] == b"DanM":
self.tile = [ImageFile._Tile("raw", (0, 0) + self.size, 32, "1")]
else:
self.tile = [ImageFile._Tile("MSP", (0, 0) + self.size, 32)]
class MspDecoder(ImageFile.PyDecoder):
# The algo for the MSP decoder is from
# https://www.fileformat.info/format/mspaint/egff.htm
# cc-by-attribution -- That page references is taken from the
# Encyclopedia of Graphics File Formats and is licensed by
# O'Reilly under the Creative Common/Attribution license
#
# For RLE encoded files, the 32byte header is followed by a scan
# line map, encoded as one 16bit word of encoded byte length per
# line.
#
# NOTE: the encoded length of the line can be 0. This was not
# handled in the previous version of this encoder, and there's no
# mention of how to handle it in the documentation. From the few
# examples I've seen, I've assumed that it is a fill of the
# background color, in this case, white.
#
#
# Pseudocode of the decoder:
# Read a BYTE value as the RunType
# If the RunType value is zero
# Read next byte as the RunCount
# Read the next byte as the RunValue
# Write the RunValue byte RunCount times
# If the RunType value is non-zero
# Use this value as the RunCount
# Read and write the next RunCount bytes literally
#
# e.g.:
# 0x00 03 ff 05 00 01 02 03 04
# would yield the bytes:
# 0xff ff ff 00 01 02 03 04
#
# which are then interpreted as a bit packed mode '1' image
_pulls_fd = True
def decode(self, buffer: bytes | Image.SupportsArrayInterface) -> tuple[int, int]:
assert self.fd is not None
img = io.BytesIO()
blank_line = bytearray((0xFF,) * ((self.state.xsize + 7) // 8))
try:
self.fd.seek(32)
rowmap = struct.unpack_from(
f"<{self.state.ysize}H", self.fd.read(self.state.ysize * 2)
)
except struct.error as e:
msg = "Truncated MSP file in row map"
raise OSError(msg) from e
for x, rowlen in enumerate(rowmap):
try:
if rowlen == 0:
img.write(blank_line)
continue
row = self.fd.read(rowlen)
if len(row) != rowlen:
msg = f"Truncated MSP file, expected {rowlen} bytes on row {x}"
raise OSError(msg)
idx = 0
while idx < rowlen:
runtype = row[idx]
idx += 1
if runtype == 0:
(runcount, runval) = struct.unpack_from("Bc", row, idx)
img.write(runval * runcount)
idx += 2
else:
runcount = runtype
img.write(row[idx : idx + runcount])
idx += runcount
except struct.error as e:
msg = f"Corrupted MSP file in row {x}"
raise OSError(msg) from e
self.set_as_raw(img.getvalue(), "1")
return -1, 0
Image.register_decoder("MSP", MspDecoder)
#
# write MSP files (uncompressed only)
def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None:
if im.mode != "1":
msg = f"cannot write mode {im.mode} as MSP"
raise OSError(msg)
# create MSP header
header = [0] * 16
header[0], header[1] = i16(b"Da"), i16(b"nM") # version 1
header[2], header[3] = im.size
header[4], header[5] = 1, 1
header[6], header[7] = 1, 1
header[8], header[9] = im.size
checksum = 0
for h in header:
checksum = checksum ^ h
header[12] = checksum # FIXME: is this the right field?
# header
for h in header:
fp.write(o16(h))
# image body
ImageFile._save(im, fp, [ImageFile._Tile("raw", (0, 0) + im.size, 32, "1")])
#
# registry
Image.register_open(MspImageFile.format, MspImageFile, _accept)
Image.register_save(MspImageFile.format, _save)
Image.register_extension(MspImageFile.format, ".msp")
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| __pycache__ | Folder | 0755 |
|
|
| BdfFontFile.py | File | 3.4 KB | 0644 |
|
| BlpImagePlugin.py | File | 16.29 KB | 0644 |
|
| BmpImagePlugin.py | File | 19.29 KB | 0644 |
|
| BufrStubImagePlugin.py | File | 1.71 KB | 0644 |
|
| ContainerIO.py | File | 4.5 KB | 0644 |
|
| CurImagePlugin.py | File | 1.75 KB | 0644 |
|
| DcxImagePlugin.py | File | 1.99 KB | 0644 |
|
| DdsImagePlugin.py | File | 16.54 KB | 0644 |
|
| EpsImagePlugin.py | File | 15.98 KB | 0644 |
|
| ExifTags.py | File | 9.7 KB | 0644 |
|
| FitsImagePlugin.py | File | 4.53 KB | 0644 |
|
| FliImagePlugin.py | File | 4.57 KB | 0644 |
|
| FontFile.py | File | 3.49 KB | 0644 |
|
| FpxImagePlugin.py | File | 7.12 KB | 0644 |
|
| FtexImagePlugin.py | File | 3.44 KB | 0644 |
|
| GbrImagePlugin.py | File | 2.94 KB | 0644 |
|
| GdImageFile.py | File | 2.74 KB | 0644 |
|
| GifImagePlugin.py | File | 40.48 KB | 0644 |
|
| GimpGradientFile.py | File | 3.81 KB | 0644 |
|
| GimpPaletteFile.py | File | 1.39 KB | 0644 |
|
| GribStubImagePlugin.py | File | 1.71 KB | 0644 |
|
| Hdf5StubImagePlugin.py | File | 1.71 KB | 0644 |
|
| IcnsImagePlugin.py | File | 12.65 KB | 0644 |
|
| IcoImagePlugin.py | File | 12.18 KB | 0644 |
|
| ImImagePlugin.py | File | 11.17 KB | 0644 |
|
| Image.py | File | 142.7 KB | 0644 |
|
| ImageChops.py | File | 7.76 KB | 0644 |
|
| ImageCms.py | File | 41.03 KB | 0644 |
|
| ImageColor.py | File | 9.22 KB | 0644 |
|
| ImageDraw.py | File | 41.28 KB | 0644 |
|
| ImageDraw2.py | File | 7.06 KB | 0644 |
|
| ImageEnhance.py | File | 3.54 KB | 0644 |
|
| ImageFile.py | File | 25.51 KB | 0644 |
|
| ImageFilter.py | File | 18.27 KB | 0644 |
|
| ImageFont.py | File | 62.75 KB | 0644 |
|
| ImageGrab.py | File | 5.86 KB | 0644 |
|
| ImageMath.py | File | 11.66 KB | 0644 |
|
| ImageMode.py | File | 2.62 KB | 0644 |
|
| ImageMorph.py | File | 8.36 KB | 0644 |
|
| ImageOps.py | File | 24.5 KB | 0644 |
|
| ImagePalette.py | File | 8.79 KB | 0644 |
|
| ImagePath.py | File | 371 B | 0644 |
|
| ImageQt.py | File | 6.67 KB | 0644 |
|
| ImageSequence.py | File | 2.15 KB | 0644 |
|
| ImageShow.py | File | 9.76 KB | 0644 |
|
| ImageStat.py | File | 5.2 KB | 0644 |
|
| ImageTransform.py | File | 3.79 KB | 0644 |
|
| ImageWin.py | File | 7.9 KB | 0644 |
|
| ImtImagePlugin.py | File | 2.6 KB | 0644 |
|
| IptcImagePlugin.py | File | 6.51 KB | 0644 |
|
| Jpeg2KImagePlugin.py | File | 13.56 KB | 0644 |
|
| JpegImagePlugin.py | File | 31.05 KB | 0644 |
|
| JpegPresets.py | File | 12.09 KB | 0644 |
|
| McIdasImagePlugin.py | File | 1.89 KB | 0644 |
|
| MicImagePlugin.py | File | 2.62 KB | 0644 |
|
| MpegImagePlugin.py | File | 2.05 KB | 0644 |
|
| MpoImagePlugin.py | File | 6.07 KB | 0644 |
|
| MspImagePlugin.py | File | 5.74 KB | 0644 |
|
| PSDraw.py | File | 6.75 KB | 0644 |
|
| PaletteFile.py | File | 1.18 KB | 0644 |
|
| PalmImagePlugin.py | File | 9.13 KB | 0644 |
|
| PcdImagePlugin.py | File | 1.55 KB | 0644 |
|
| PcfFontFile.py | File | 6.98 KB | 0644 |
|
| PcxImagePlugin.py | File | 6.1 KB | 0644 |
|
| PdfImagePlugin.py | File | 9.13 KB | 0644 |
|
| PdfParser.py | File | 37.09 KB | 0644 |
|
| PixarImagePlugin.py | File | 1.71 KB | 0644 |
|
| PngImagePlugin.py | File | 49.67 KB | 0644 |
|
| PpmImagePlugin.py | File | 12.06 KB | 0644 |
|
| PsdImagePlugin.py | File | 8.42 KB | 0644 |
|
| QoiImagePlugin.py | File | 4.08 KB | 0644 |
|
| SgiImagePlugin.py | File | 6.57 KB | 0644 |
|
| SpiderImagePlugin.py | File | 9.9 KB | 0644 |
|
| SunImagePlugin.py | File | 4.48 KB | 0644 |
|
| TarIO.py | File | 1.34 KB | 0644 |
|
| TgaImagePlugin.py | File | 6.82 KB | 0644 |
|
| TiffImagePlugin.py | File | 81.44 KB | 0644 |
|
| TiffTags.py | File | 16.68 KB | 0644 |
|
| WalImageFile.py | File | 5.57 KB | 0644 |
|
| WebPImagePlugin.py | File | 9.83 KB | 0644 |
|
| WmfImagePlugin.py | File | 5.02 KB | 0644 |
|
| XVThumbImagePlugin.py | File | 2.06 KB | 0644 |
|
| XbmImagePlugin.py | File | 2.6 KB | 0644 |
|
| XpmImagePlugin.py | File | 3.15 KB | 0644 |
|
| __init__.py | File | 1.96 KB | 0644 |
|
| __main__.py | File | 133 B | 0644 |
|
| _binary.py | File | 2.49 KB | 0644 |
|
| _deprecate.py | File | 1.89 KB | 0644 |
|
| _imaging.cpython-313-x86_64-linux-gnu.so | File | 750.65 KB | 0644 |
|
| _imaging.pyi | File | 868 B | 0644 |
|
| _imagingcms.cpython-313-x86_64-linux-gnu.so | File | 41.73 KB | 0644 |
|
| _imagingcms.pyi | File | 4.29 KB | 0644 |
|
| _imagingft.cpython-313-x86_64-linux-gnu.so | File | 45.63 KB | 0644 |
|
| _imagingft.pyi | File | 1.75 KB | 0644 |
|
| _imagingmath.cpython-313-x86_64-linux-gnu.so | File | 34.48 KB | 0644 |
|
| _imagingmath.pyi | File | 63 B | 0644 |
|
| _imagingmorph.cpython-313-x86_64-linux-gnu.so | File | 14.48 KB | 0644 |
|
| _imagingmorph.pyi | File | 63 B | 0644 |
|
| _imagingtk.pyi | File | 63 B | 0644 |
|
| _tkinter_finder.py | File | 540 B | 0644 |
|
| _typing.py | File | 1.21 KB | 0644 |
|
| _util.py | File | 635 B | 0644 |
|
| _version.py | File | 87 B | 0644 |
|
| _webp.cpython-313-x86_64-linux-gnu.so | File | 23.97 KB | 0644 |
|
| _webp.pyi | File | 63 B | 0644 |
|
| features.py | File | 11 KB | 0644 |
|
| py.typed | File | 0 B | 0644 |
|
| report.py | File | 100 B | 0644 |
|