## The Python Imaging Library## load a GIMP brush file## History:# 96-03-14 fl Created# 16-01-08 es Version 2## Copyright (c) Secret Labs AB 1997.# Copyright (c) Fredrik Lundh 1996.# Copyright (c) Eric Soroos 2016.## See the README file for information on usage and redistribution.### See https://github.com/GNOME/gimp/blob/mainline/devel-docs/gbr.txt for# format documentation.## This code Interprets version 1 and 2 .gbr files.# Version 1 files are obsolete, and should not be used for new# brushes.# Version 2 files are saved by GIMP v2.8 (at least)# Version 3 files have a format specifier of 18 for 16bit floats in# the color depth field. This is currently unsupported by Pillow.from__future__importannotationsfrom.importImage,ImageFilefrom._binaryimporti32beasi32def_accept(prefix:bytes)->bool:returnlen(prefix)>=8andi32(prefix,0)>=20andi32(prefix,4)in(1,2)### Image plugin for the GIMP brush format.
[docs]classGbrImageFile(ImageFile.ImageFile):format="GBR"format_description="GIMP brush file"def_open(self):header_size=i32(self.fp.read(4))ifheader_size<20:msg="not a GIMP brush"raiseSyntaxError(msg)version=i32(self.fp.read(4))ifversionnotin(1,2):msg=f"Unsupported GIMP brush version: {version}"raiseSyntaxError(msg)width=i32(self.fp.read(4))height=i32(self.fp.read(4))color_depth=i32(self.fp.read(4))ifwidth<=0orheight<=0:msg="not a GIMP brush"raiseSyntaxError(msg)ifcolor_depthnotin(1,4):msg=f"Unsupported GIMP brush color depth: {color_depth}"raiseSyntaxError(msg)ifversion==1:comment_length=header_size-20else:comment_length=header_size-28magic_number=self.fp.read(4)ifmagic_number!=b"GIMP":msg="not a GIMP brush, bad magic number"raiseSyntaxError(msg)self.info["spacing"]=i32(self.fp.read(4))comment=self.fp.read(comment_length)[:-1]ifcolor_depth==1:self._mode="L"else:self._mode="RGBA"self._size=width,heightself.info["comment"]=comment# Image might not be smallImage._decompression_bomb_check(self.size)# Data is an uncompressed block of w * h * bytes/pixelself._data_size=width*height*color_depth