Deep-Software-Analytics/SweSetupBench-lite huggingface dataset:
Repository: python-pillow/Pillow

Problem statement:
Enable writing I;16B images as PNG
While investigating an ImageIO issue concerning behavior on big-endian architectures I've noticed that pillow's PNG plugin currently doesn't allow writing 16-bit big-endian images to PNG. `I;16` is already supported, so I was wondering if it would be possible to add `I;16B` as well.

From what I can see, the only change needed to support this would be to add the line `"I;16B": ("I;16B", b"\x10\x00"),` to this dict:

https://github.com/python-pillow/Pillow/blob/3c5324b07c2ed98bc0ec94bd5c6a30f9c66e42fb/src/PIL/PngImagePlugin.py#L1035-L1051

With this change we would be able to do 16 bit round-trips on big-endian, i.e., we can decode the pixel data directly into a 16 bit big-endian buffer and then use that same buffer when encoding as PNG. This would improve performance and streamline working with native encoding on big-endian machines. 


Hints:

Patch:
diff --git a/src/PIL/PngImagePlugin.py b/src/PIL/PngImagePlugin.py
--- a/src/PIL/PngImagePlugin.py
+++ b/src/PIL/PngImagePlugin.py
@@ -1042,6 +1042,7 @@ def getxmp(self):
     "LA": ("LA", b"\x08\x04"),
     "I": ("I;16B", b"\x10\x00"),
     "I;16": ("I;16B", b"\x10\x00"),
+    "I;16B": ("I;16B", b"\x10\x00"),
     "P;1": ("P;1", b"\x01\x03"),
     "P;2": ("P;2", b"\x02\x03"),
     "P;4": ("P;4", b"\x04\x03"),


Test patch:
diff --git a/Tests/test_file_png.py b/Tests/test_file_png.py
--- a/Tests/test_file_png.py
+++ b/Tests/test_file_png.py
@@ -92,11 +92,11 @@ def test_sanity(self, tmp_path):
             assert im.format == "PNG"
             assert im.get_format_mimetype() == "image/png"
 
-        for mode in ["1", "L", "P", "RGB", "I", "I;16"]:
+        for mode in ["1", "L", "P", "RGB", "I", "I;16", "I;16B"]:
             im = hopper(mode)
             im.save(test_file)
             with Image.open(test_file) as reloaded:
-                if mode == "I;16":
+                if mode in ("I;16", "I;16B"):
                     reloaded = reloaded.convert(mode)
                 assert_image_equal(reloaded, im)
Repository: python-pillow/Pillow

Problem statement:
Saving TIFF stack does not support tags with type long8
Title pretty much says it all. 

I believe the problem is that this list doesn't contain long8: [here](https://github.com/python-pillow/Pillow/blob/4ffbbe194c5a1b8840f809574017ab5f1333695f/src/PIL/TiffImagePlugin.py#L1881)

to reproduce
```python
import numpy as np
import PIL
from PIL.TiffImagePlugin import ImageFileDirectory_v2
x = np.ones((2, 10, 10))
pilimgs = [PIL.Image.fromarray(i) for i in x]
ifd = ImageFileDirectory_v2()
ifd[256] = 10
ifd[257] = 10
ifd[65000] = 1234
ifd.tagtype[65000] = 16
pilimgs[0].save("testimgs.tif", save_all=True, tiffinfo=ifd,
                append_images=pilimgs[1:], format="tiff")
```





Hints:

Patch:
diff --git a/src/PIL/TiffImagePlugin.py b/src/PIL/TiffImagePlugin.py
--- a/src/PIL/TiffImagePlugin.py
+++ b/src/PIL/TiffImagePlugin.py
@@ -1892,6 +1892,10 @@ class AppendingTiffWriter:
         8,  # srational
         4,  # float
         8,  # double
+        4,  # ifd
+        2,  # unicode
+        4,  # complex
+        8,  # long8
     ]
 
     #    StripOffsets = 273


Test patch:
diff --git a/Tests/test_file_tiff.py b/Tests/test_file_tiff.py
--- a/Tests/test_file_tiff.py
+++ b/Tests/test_file_tiff.py
@@ -96,10 +96,17 @@ def test_mac_tiff(self):
 
             assert_image_similar_tofile(im, "Tests/images/pil136.png", 1)
 
-    def test_bigtiff(self):
+    def test_bigtiff(self, tmp_path):
         with Image.open("Tests/images/hopper_bigtiff.tif") as im:
             assert_image_equal_tofile(im, "Tests/images/hopper.tif")
 
+        with Image.open("Tests/images/hopper_bigtiff.tif") as im:
+            # multistrip support not yet implemented
+            del im.tag_v2[273]
+
+            outfile = str(tmp_path / "temp.tif")
+            im.save(outfile, save_all=True, append_images=[im], tiffinfo=im.tag_v2)
+
     def test_set_legacy_api(self):
         ifd = TiffImagePlugin.ImageFileDirectory_v2()
         with pytest.raises(Exception) as e:
Repository: python-pillow/Pillow

Problem statement:
convert("LAB") fails for RGB
### What did you do?

Called PIL.Image.Image.convert(mode='LAB') for an RGB image
```python
img = PIL.Image.open('filename.png').convert(mode='LAB')
```
### What did you expect to happen?

Conversion of data to LAB colourspace.

### What actually happened?

ValueError: conversion from RGB to LAB not supported

The following code did work:
```python
rgb_lab_transform = PIL.ImageCms.buildTransformFromOpenProfiles(PIL.ImageCms.createProfile('sRGB'), PIL.ImageCms.createProfile('LAB'), 'RGB', 'LAB')
img = PIL.ImageCms.applyTransform(Image.open('filename.png').convert(mode='RGB'), rgb_lab_transform)
```

### What are your OS, Python and Pillow versions?

* OS: Linux, kernel 5.15.32-gentoo-r1
* Python: 3.10.6
* Pillow: 9.2.0




Hints:

Patch:
diff --git a/src/PIL/Image.py b/src/PIL/Image.py
--- a/src/PIL/Image.py
+++ b/src/PIL/Image.py
@@ -1027,6 +1027,19 @@ def convert_transparency(m, v):
                     warnings.warn("Couldn't allocate palette entry for transparency")
             return new
 
+        if "LAB" in (self.mode, mode):
+            other_mode = mode if self.mode == "LAB" else self.mode
+            if other_mode in ("RGB", "RGBA", "RGBX"):
+                from . import ImageCms
+
+                srgb = ImageCms.createProfile("sRGB")
+                lab = ImageCms.createProfile("LAB")
+                profiles = [lab, srgb] if self.mode == "LAB" else [srgb, lab]
+                transform = ImageCms.buildTransform(
+                    profiles[0], profiles[1], self.mode, mode
+                )
+                return transform.apply(self)
+
         # colorspace conversion
         if dither is None:
             dither = Dither.FLOYDSTEINBERG


Test patch:
diff --git a/Tests/test_image_convert.py b/Tests/test_image_convert.py
--- a/Tests/test_image_convert.py
+++ b/Tests/test_image_convert.py
@@ -242,6 +242,17 @@ def test_p2pa_palette():
     assert im_pa.getpalette() == im.getpalette()
 
 
+@pytest.mark.parametrize("mode", ("RGB", "RGBA", "RGBX"))
+def test_rgb_lab(mode):
+    im = Image.new(mode, (1, 1))
+    converted_im = im.convert("LAB")
+    assert converted_im.getpixel((0, 0)) == (0, 128, 128)
+
+    im = Image.new("LAB", (1, 1), (255, 0, 0))
+    converted_im = im.convert(mode)
+    assert converted_im.getpixel((0, 0))[:3] == (0, 255, 255)
+
+
 def test_matrix_illegal_conversion():
     # Arrange
     im = hopper("CMYK")
Repository: python-pillow/Pillow

Problem statement:
EXIF prefix saved in WebP
### What did you do?

I saved 2 copies of a webp file, one with exif=exif_bytes as shown, one without, then added the exif data by piexif.insert

### What did you expect to happen?

exif data to be the same

### What actually happened?

winmerge binary comparison reveals "Exif" is quoted one extra time in the Pillow image.save version indicating a coding error

### What are your OS, Python and Pillow versions?

* OS: Windows 10
* Python: 3.8
* Pillow: 9.2.0

<!--
Please include **code** that reproduces the issue and whenever possible, an **image** that demonstrates the issue. Please upload images to GitHub, not to third-party file hosting sites. If necessary, add the image to a zip or tar archive.

The best reproductions are self-contained scripts with minimal dependencies. If you are using a framework such as Plone, Django, or Buildout, try to replicate the issue just using Pillow.
-->

```python


from PIL import Image
import piexif
import piexif.helper

info = "test data in User Comment"
fullfn = "sample_image.webp"

exif_bytes = piexif.dump({
		"Exif": {
			piexif.ExifIFD.UserComment: piexif.helper.UserComment.dump(info, encoding="unicode")
		},
	})

with Image.open(fullfn) as image:
	image.save(fullfn, quality=60, exif=exif_bytes)

	image.save("sample_image_inserted_exif.webp", "webp", quality=60)

piexif.insert(exif_bytes, "sample_image_inserted_exif.webp")

```



Hints:

Patch:
diff --git a/src/PIL/WebPImagePlugin.py b/src/PIL/WebPImagePlugin.py
--- a/src/PIL/WebPImagePlugin.py
+++ b/src/PIL/WebPImagePlugin.py
@@ -311,9 +311,11 @@ def _save(im, fp, filename):
     lossless = im.encoderinfo.get("lossless", False)
     quality = im.encoderinfo.get("quality", 80)
     icc_profile = im.encoderinfo.get("icc_profile") or ""
-    exif = im.encoderinfo.get("exif", "")
+    exif = im.encoderinfo.get("exif", b"")
     if isinstance(exif, Image.Exif):
         exif = exif.tobytes()
+    if exif.startswith(b"Exif\x00\x00"):
+        exif = exif[6:]
     xmp = im.encoderinfo.get("xmp", "")
     method = im.encoderinfo.get("method", 4)
 


Test patch:
diff --git a/Tests/test_file_webp_metadata.py b/Tests/test_file_webp_metadata.py
--- a/Tests/test_file_webp_metadata.py
+++ b/Tests/test_file_webp_metadata.py
@@ -55,9 +55,7 @@ def test_write_exif_metadata():
     test_buffer.seek(0)
     with Image.open(test_buffer) as webp_image:
         webp_exif = webp_image.info.get("exif", None)
-    assert webp_exif
-    if webp_exif:
-        assert webp_exif == expected_exif, "WebP EXIF didn't match"
+    assert webp_exif == expected_exif[6:], "WebP EXIF didn't match"
 
 
 def test_read_icc_profile():
Repository: python-pillow/Pillow

Problem statement:
PSD incorrectly loaded
### What did you do?
I opened the TIFF in Pillow and converted it to JPG.
### What did you expect to happen?
The JPG image to look the same as the original TIFF.
### What actually happened?
The converted JPG looks malformed and has messed up colors.
### What are your OS, Python and Pillow versions?

* OS: Linux
* Python: 3.10.5
* Pillow: 9.1.1 (also tested -git)

```python
>>> img = Image.open("3662b8bd397337482862ab1a06bf3366-OA_535_161_17_F_TE.tif")
>>> out_img = img.convert("RGB")
>>> out_img.save("converted.jpg", quality=95)
```
[original image](https://api.collectie.gent/storage/v1/download/3662b8bd397337482862ab1a06bf3366-OA_535_161_17_F_TE.tif) (beware, 274MB)
[converted image](https://api.collectie.gent/storage/v1/download/3a029a4f48b480211286486a6a1f0f0b-transcode-OA_535_161_17_F_TE.jpg)

Is it okay to report this here or should I report this to the appropriate library (libtiff, jpeg-turbo, ?)


Hints:
Here is the right place to report it - taking a look, your file is actually not a TIFF, but a Photoshop file. The fact that we're not loading it correctly has nothing to do with those other libraries.
@radarhere My bad, I should have checked the mimetype...

Patch:
diff --git a/src/PIL/PsdImagePlugin.py b/src/PIL/PsdImagePlugin.py
--- a/src/PIL/PsdImagePlugin.py
+++ b/src/PIL/PsdImagePlugin.py
@@ -75,6 +75,9 @@ def _open(self):
 
         if channels > psd_channels:
             raise OSError("not enough channels")
+        if mode == "RGB" and psd_channels == 4:
+            mode = "RGBA"
+            channels = 4
 
         self.mode = mode
         self._size = i32(s, 18), i32(s, 14)


Test patch:
diff --git a/Tests/images/rgba.psd b/Tests/images/rgba.psd
new file mode 100644
Binary files /dev/null and b/Tests/images/rgba.psd differ
diff --git a/Tests/test_file_psd.py b/Tests/test_file_psd.py
--- a/Tests/test_file_psd.py
+++ b/Tests/test_file_psd.py
@@ -4,7 +4,7 @@
 
 from PIL import Image, PsdImagePlugin
 
-from .helper import assert_image_similar, hopper, is_pypy
+from .helper import assert_image_equal_tofile, assert_image_similar, hopper, is_pypy
 
 test_file = "Tests/images/hopper.psd"
 
@@ -107,6 +107,11 @@ def test_open_after_exclusive_load():
         im.load()
 
 
+def test_rgba():
+    with Image.open("Tests/images/rgba.psd") as im:
+        assert_image_equal_tofile(im, "Tests/images/imagedraw_square.png")
+
+
 def test_icc_profile():
     with Image.open(test_file) as im:
         assert "icc_profile" in im.info
Repository: python-pillow/Pillow

Problem statement:
[PNG] IndexError is raised when the sRGB chunk is broken

### What did you do?

```python3

from PIL import Image
import io

# assumes the current directory is the root of this repository.
with open('Tests/images/imagedraw_polygon_1px_high.png', 'rb') as f:
    data = bytearray(f.read())

# insert the sRGB chunk after the IDAT chunk. Its length, chunk type and crc are valid, but the sRGB chunk should contain more data.
data[61:61] = b"\x00\x00\x00\x00sRGB\x10\x1c\xd3\xce"

# IndexError is raised
with Image.open(io.BytesIO(data)) as img:
    img.load()

```

### What did you expect to happen?

IndexError is a little conusing. Maybe ValueError is better.

### What actually happened?

```
Traceback (most recent call last):
  File "issue_index_error_simplified.py", line 14, in <module>
    img.load()
  File "/usr/local/lib/python3.8/dist-packages/PIL/ImageFile.py", line 268, in load
    self.load_end()
  File "/usr/local/lib/python3.8/dist-packages/PIL/PngImagePlugin.py", line 978, in load_end
    self.png.call(cid, pos, length)
  File "/usr/local/lib/python3.8/dist-packages/PIL/PngImagePlugin.py", line 202, in call
    return getattr(self, "chunk_" + cid.decode("ascii"))(pos, length)
  File "/usr/local/lib/python3.8/dist-packages/PIL/PngImagePlugin.py", line 512, in chunk_sRGB
    self.im_info["srgb"] = s[0]
IndexError: index out of range
```

### What are your OS, Python and Pillow versions?

* OS: ubuntu:focal-20220426
* Python: 3.8.10
* Pillow: 9.2.0



Hints:

Patch:
diff --git a/src/PIL/PngImagePlugin.py b/src/PIL/PngImagePlugin.py
--- a/src/PIL/PngImagePlugin.py
+++ b/src/PIL/PngImagePlugin.py
@@ -509,6 +509,10 @@ def chunk_sRGB(self, pos, length):
         # 3 absolute colorimetric
 
         s = ImageFile._safe_read(self.fp, length)
+        if length < 1:
+            if ImageFile.LOAD_TRUNCATED_IMAGES:
+                return s
+            raise ValueError("Truncated sRGB chunk")
         self.im_info["srgb"] = s[0]
         return s
 


Test patch:
diff --git a/Tests/test_file_png.py b/Tests/test_file_png.py
--- a/Tests/test_file_png.py
+++ b/Tests/test_file_png.py
@@ -635,7 +635,9 @@ def test_padded_idat(self):
 
             assert_image_equal_tofile(im, "Tests/images/bw_gradient.png")
 
-    @pytest.mark.parametrize("cid", (b"IHDR", b"pHYs", b"acTL", b"fcTL", b"fdAT"))
+    @pytest.mark.parametrize(
+        "cid", (b"IHDR", b"sRGB", b"pHYs", b"acTL", b"fcTL", b"fdAT")
+    )
     def test_truncated_chunks(self, cid):
         fp = BytesIO()
         with PngImagePlugin.PngStream(fp) as png:
Repository: python-pillow/Pillow

Problem statement:
'float' object cannot be interpreted as an integer exception when applying point transforms
### What did you do?
Following the docs to apply point transforms:
https://pillow.readthedocs.io/en/stable/handbook/tutorial.html?highlight=.point(#applying-point-transforms

### What actually happened?
The following exception was raised: `'float' object cannot be interpreted as an integer`.

### What are your OS, Python and Pillow versions?

* OS: Windows 11 Pro (22000.556)
* Python: 3.10.4 (packaged by conda-forge)
* Pillow: 9.1.0

Code to reproduce
```python
from PIL import Image

image = Image.open(image_path).convert('RGBA')
alpha_channel = image.getchannel('A')
image.putalpha(alpha_channel.point(lambda x: x * 0.5))
```

With Pillow 8.3.2 and Python 3.8, the above code worked well.

Edit: I've tested Pillow 9.1.0 with Python 3.9.12 and it works fine, so it seems to be an issue related to Python 3.10.x


Hints:
Thanks. This would be because of https://docs.python.org/3/c-api/long.html#c.PyLong_AsLong
> Changed in version 3.10: This function will no longer use `__int__()`.

I've created PR #6188 to resolve this.

Patch:
diff --git a/src/PIL/Image.py b/src/PIL/Image.py
--- a/src/PIL/Image.py
+++ b/src/PIL/Image.py
@@ -1720,6 +1720,8 @@ def point(self, data):
             # FIXME: _imaging returns a confusing error message for this case
             raise ValueError("point operation not supported for this mode")
 
+        if mode != "F":
+            lut = [round(i) for i in lut]
         return self._new(self.im.point(lut, mode))
 
     def putalpha(self, alpha):


Test patch:
diff --git a/Tests/test_image_point.py b/Tests/test_image_point.py
--- a/Tests/test_image_point.py
+++ b/Tests/test_image_point.py
@@ -10,6 +10,7 @@ def test_sanity():
         im.point(list(range(256)))
     im.point(list(range(256)) * 3)
     im.point(lambda x: x)
+    im.point(lambda x: x * 1.2)
 
     im = im.convert("I")
     with pytest.raises(ValueError):
Repository: python-pillow/Pillow

Problem statement:
Cannot modify the first frame of a MPO with asymmetric sized frames after seek
### What did you do?
Did a seek(1) to the second frame followed by a seek(0) back to the first, and a transpose

### What did you expect to happen?

The transpose

### What actually happened?

Segmentation fault: 11

### What are your OS, Python and Pillow versions?

* OS: OSX 10.15.7 and Ubuntu 20.04
* Python: 3.8.11 and 3.10.2
* Pillow: 9.0.1

This is an edge case issue with images created by the Nikon coolpix 500b (and possibly others), which appears to embed a couple "thumbnails" in the image files. Pillow (reasonably) detects this as a 3-frame MPO. For some reason, however, seeking back to the first frame and trying to modify it after seeking to any other frame crashes with a seg fault.

For the example below I used this image (not sure on the licensing, just the first I googled):
https://img.photographyblog.com/reviews/nikon_coolpix_b500/photos/nikon_coolpix_b500_02.jpg

```python
from PIL import Image
im = Image.open('nikon_coolpix_b500_02.jpg')
im.seek(1)
im.seek(0)
im.transpose(Image.FLIP_LEFT_RIGHT) # => Segment fault: 11
```

If it helps, I noticed that the `im.size` doesn't update after the `seek(0)` back to the first frame, even though `tell` reports the correct frame:
```python
im = Image.open('nikon_coolpix_b500_02.jpg')
im.size #  =>  (4608, 3456)
im.seek(1)
im.size #  =>  (640, 480)
im.seek(0)
im.size #  =>  (640, 480)
im.tell() # => 0
```
For my particular case, the problematic usage was some legacy code trying to detect animations that is better handled by checking `n_frames`, so I was able to work around it. Mainly documenting the issue in case anyone else runs into it.


Hints:

Patch:
diff --git a/src/PIL/MpoImagePlugin.py b/src/PIL/MpoImagePlugin.py
--- a/src/PIL/MpoImagePlugin.py
+++ b/src/PIL/MpoImagePlugin.py
@@ -46,6 +46,7 @@ def _open(self):
         self._after_jpeg_open()
 
     def _after_jpeg_open(self, mpheader=None):
+        self._initial_size = self.size
         self.mpinfo = mpheader if mpheader is not None else self._getmp()
         self.n_frames = self.mpinfo[0xB001]
         self.__mpoffsets = [
@@ -77,6 +78,7 @@ def seek(self, frame):
         segment = self.fp.read(2)
         if not segment:
             raise ValueError("No data found for frame")
+        self._size = self._initial_size
         if i16(segment) == 0xFFE1:  # APP1
             n = i16(self.fp.read(2)) - 2
             self.info["exif"] = ImageFile._safe_read(self.fp, n)


Test patch:
diff --git a/Tests/test_file_mpo.py b/Tests/test_file_mpo.py
--- a/Tests/test_file_mpo.py
+++ b/Tests/test_file_mpo.py
@@ -85,6 +85,9 @@ def test_frame_size():
         im.seek(1)
         assert im.size == (680, 480)
 
+        im.seek(0)
+        assert im.size == (640, 480)
+
 
 def test_ignore_frame_size():
     # Ignore the different size of the second frame
Repository: python-pillow/Pillow

Problem statement:
Changing Jupyter plain text output on every cell run
### What did you do?

I'm using Pillow to generate simple images in Jupyter environment:

```python
from PIL import Image
Image.frombuffer('RGB', (16,16), bytes([100]*(16*16)))
```

It works nicely!

![image](https://user-images.githubusercontent.com/510678/146259055-bff41a14-b40d-452e-a354-11c05ce78b58.png)

### What did you expect to happen?

I expect every run of the cell produce the same output in the notebook file, to avoid needless changes in Git.

### What actually happened?

Every run produces different hash in text representation of the output. For example: `at 0x1075D8370`.

```diff
$ git diff test.ipynb 
diff --git a/test.ipynb b/test.ipynb
index f769d4b..a4dd8af 100644
--- a/test.ipynb
+++ b/test.ipynb
@@ -9,7 +9,7 @@
      "data": {
       "image/png": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAGUlEQVR4nGPc62fCQApgIkn1qIZRDUNKAwADRwFfBBwAnwAAAABJRU5ErkJggg==",
       "text/plain": [
-       "<PIL.Image.Image image mode=RGB size=16x16 at 0x1075D8370>"
+       "<PIL.Image.Image image mode=RGB size=16x16 at 0x108C50160>"
       ]
      },
      "execution_count": 1,
```

Compare with Matplotlib output:

```json
     "data": {
      "image/png": "...",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     }
```

### What are your OS, Python and Pillow versions?

* OS: Mac OS 10.15.6
* Python: 3.9.8
* Pillow: 8.4.0


Hints:

Patch:
diff --git a/src/PIL/Image.py b/src/PIL/Image.py
--- a/src/PIL/Image.py
+++ b/src/PIL/Image.py
@@ -644,6 +644,22 @@ def __repr__(self):
             id(self),
         )
 
+    def _repr_pretty_(self, p, cycle):
+        """IPython plain text display support"""
+
+        # Same as __repr__ but without unpredicatable id(self),
+        # to keep Jupyter notebook `text/plain` output stable.
+        p.text(
+            "<%s.%s image mode=%s size=%dx%d>"
+            % (
+                self.__class__.__module__,
+                self.__class__.__name__,
+                self.mode,
+                self.size[0],
+                self.size[1],
+            )
+        )
+
     def _repr_png_(self):
         """iPython display hook support
 


Test patch:
diff --git a/Tests/test_image.py b/Tests/test_image.py
--- a/Tests/test_image.py
+++ b/Tests/test_image.py
@@ -88,6 +88,17 @@ def test_sanity(self):
         # with pytest.raises(MemoryError):
         #   Image.new("L", (1000000, 1000000))
 
+    def test_repr_pretty(self):
+        class Pretty:
+            def text(self, text):
+                self.pretty_output = text
+
+        im = Image.new("L", (100, 100))
+
+        p = Pretty()
+        im._repr_pretty_(p, None)
+        assert p.pretty_output == "<PIL.Image.Image image mode=L size=100x100>"
+
     def test_open_formats(self):
         PNGFILE = "Tests/images/hopper.png"
         JPGFILE = "Tests/images/hopper.jpg"