diff --git a/CHANGES.rst b/CHANGES.rst
index a82b3afbc..2419837bf 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -7,12 +7,6 @@ Changelog (Pillow)
 
 - This is the last Pillow release to support Python 2.7 #3642
 
-- Added argument to capture all screens on Windows #3950
-  [nulano, radarhere]
-
-- Updated warning to specify when Image.frombuffer defaults will change #4086
-  [radarhere]
-
 - Changed WindowsViewer format to PNG #4080
   [radarhere]
 
diff --git a/docs/reference/ImageGrab.rst b/docs/reference/ImageGrab.rst
index e94e21cb9..ed7482e99 100644
--- a/docs/reference/ImageGrab.rst
+++ b/docs/reference/ImageGrab.rst
@@ -11,7 +11,7 @@ or the clipboard to a PIL image memory.
 
 .. versionadded:: 1.1.3
 
-.. py:function:: PIL.ImageGrab.grab(bbox=None, include_layered_windows=False, all_screens=False)
+.. py:function:: PIL.ImageGrab.grab(bbox=None, include_layered_windows=False)
 
     Take a snapshot of the screen. The pixels inside the bounding box are
     returned as an "RGB" image on Windows or "RGBA" on macOS.
@@ -20,13 +20,7 @@ or the clipboard to a PIL image memory.
     .. versionadded:: 1.1.3 (Windows), 3.0.0 (macOS)
 
     :param bbox: What region to copy. Default is the entire screen.
-                 Note that on Windows OS, the top-left point may be negative if ``all_screens=True`` is used.
     :param include_layered_windows: Includes layered windows. Windows OS only.
-
-        .. versionadded:: 6.1.0
-    :param all_screens: Capture all monitors. Windows OS only.
-
-        .. versionadded:: 6.2.0
     :return: An image
 
 .. py:function:: PIL.ImageGrab.grabclipboard()
diff --git a/docs/releasenotes/6.2.0.rst b/docs/releasenotes/6.2.0.rst
index 0c3ce77e2..68d209f35 100644
--- a/docs/releasenotes/6.2.0.rst
+++ b/docs/releasenotes/6.2.0.rst
@@ -44,12 +44,6 @@ creates the following image:
 
 .. image:: ../../Tests/images/imagedraw_stroke_different.png
 
-ImageGrab on multi-monitor Windows
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-An `all_screens` argument has been added to ``ImageGrab.grab``. If ``True``,
-all monitors will be included in the created image.
-
 API Changes
 ===========
 
@@ -70,13 +64,6 @@ Python 2.7 reaches end-of-life on 2020-01-01.
 Pillow 7.0.0 will be released on 2020-01-01 and will drop support for Python
 2.7, making Pillow 6.2.x the last release series to support Python 2.
 
-Image.frombuffer
-~~~~~~~~~~~~~~~~
-
-There has been a longstanding warning that the defaults of ``Image.frombuffer``
-may change in the future for the "raw" decoder. The change will now take place
-in Pillow 7.0.
-
 Other Changes
 =============
 
diff --git a/src/PIL/ImageGrab.py b/src/PIL/ImageGrab.py
index 9b4413536..8f359e229 100644
--- a/src/PIL/ImageGrab.py
+++ b/src/PIL/ImageGrab.py
@@ -29,7 +29,7 @@ else:
     raise ImportError("ImageGrab is macOS and Windows only")
 
 
-def grab(bbox=None, include_layered_windows=False, all_screens=False):
+def grab(bbox=None, include_layered_windows=False):
     if sys.platform == "darwin":
         fh, filepath = tempfile.mkstemp(".png")
         os.close(fh)
@@ -37,10 +37,8 @@ def grab(bbox=None, include_layered_windows=False, all_screens=False):
         im = Image.open(filepath)
         im.load()
         os.unlink(filepath)
-        if bbox:
-            im = im.crop(bbox)
     else:
-        offset, size, data = grabber(include_layered_windows, all_screens)
+        size, data = grabber(include_layered_windows)
         im = Image.frombytes(
             "RGB",
             size,
@@ -51,10 +49,8 @@ def grab(bbox=None, include_layered_windows=False, all_screens=False):
             (size[0] * 3 + 3) & -4,
             -1,
         )
-        if bbox:
-            x0, y0 = offset
-            left, top, right, bottom = bbox
-            im = im.crop((left - x0, top - y0, right - x0, bottom - y0))
+    if bbox:
+        im = im.crop(bbox)
     return im
 
 
diff --git a/src/PIL/ImageOps.py b/src/PIL/ImageOps.py
index cfdd5c02a..5052cb74d 100644
--- a/src/PIL/ImageOps.py
+++ b/src/PIL/ImageOps.py
@@ -426,7 +426,11 @@ def fit(image, size, method=Image.NEAREST, bleed=0.0, centering=(0.5, 0.5)):
     output_ratio = float(size[0]) / size[1]
 
     # figure out if the sides or top/bottom will be cropped off
-    if live_size_ratio >= output_ratio:
+    if live_size_ratio == output_ratio:
+        # live_size is already the needed ratio
+        crop_width = live_size[0]
+        crop_height = live_size[1]
+    elif live_size_ratio >= output_ratio:
         # live_size is wider than what's needed, crop the sides
         crop_width = output_ratio * live_size[1]
         crop_height = live_size[1]
diff --git a/src/PIL/SpiderImagePlugin.py b/src/PIL/SpiderImagePlugin.py
index f1cae4d9f..5663a5b53 100644
--- a/src/PIL/SpiderImagePlugin.py
+++ b/src/PIL/SpiderImagePlugin.py
@@ -236,7 +236,7 @@ def loadImageSeries(filelist=None):
 def makeSpiderHeader(im):
     nsam, nrow = im.size
     lenbyt = nsam * 4  # There are labrec records in the header
-    labrec = int(1024 / lenbyt)
+    labrec = 1024 / lenbyt
     if 1024 % lenbyt != 0:
         labrec += 1
     labbyt = labrec * lenbyt
diff --git a/src/display.c b/src/display.c
index 67f8e546c..ab005d4b4 100644
--- a/src/display.c
+++ b/src/display.c
@@ -322,15 +322,15 @@ PyImaging_DisplayModeWin32(PyObject* self, PyObject* args)
 PyObject*
 PyImaging_GrabScreenWin32(PyObject* self, PyObject* args)
 {
-    int x = 0, y = 0, width, height;
-    int includeLayeredWindows = 0, all_screens = 0;
+    int width, height;
+    int includeLayeredWindows = 0;
     HBITMAP bitmap;
     BITMAPCOREHEADER core;
     HDC screen, screen_copy;
     DWORD rop;
     PyObject* buffer;
 
-    if (!PyArg_ParseTuple(args, "|ii", &includeLayeredWindows, &all_screens))
+    if (!PyArg_ParseTuple(args, "|i", &includeLayeredWindows))
         return NULL;
 
     /* step 1: create a memory DC large enough to hold the
@@ -339,15 +339,8 @@ PyImaging_GrabScreenWin32(PyObject* self, PyObject* args)
     screen = CreateDC("DISPLAY", NULL, NULL, NULL);
     screen_copy = CreateCompatibleDC(screen);
 
-    if (all_screens) {
-        x = GetSystemMetrics(SM_XVIRTUALSCREEN);
-        y = GetSystemMetrics(SM_YVIRTUALSCREEN);
-        width = GetSystemMetrics(SM_CXVIRTUALSCREEN);
-        height = GetSystemMetrics(SM_CYVIRTUALSCREEN);
-    } else {
-        width = GetDeviceCaps(screen, HORZRES);
-        height = GetDeviceCaps(screen, VERTRES);
-    }
+    width = GetDeviceCaps(screen, HORZRES);
+    height = GetDeviceCaps(screen, VERTRES);
 
     bitmap = CreateCompatibleBitmap(screen, width, height);
     if (!bitmap)
@@ -361,7 +354,7 @@ PyImaging_GrabScreenWin32(PyObject* self, PyObject* args)
     rop = SRCCOPY;
     if (includeLayeredWindows)
         rop |= CAPTUREBLT;
-    if (!BitBlt(screen_copy, 0, 0, width, height, screen, x, y, rop))
+    if (!BitBlt(screen_copy, 0, 0, width, height, screen, 0, 0, rop))
         goto error;
 
     /* step 3: extract bits from bitmap */
@@ -383,7 +376,7 @@ PyImaging_GrabScreenWin32(PyObject* self, PyObject* args)
     DeleteDC(screen_copy);
     DeleteDC(screen);
 
-    return Py_BuildValue("(ii)(ii)N", x, y, width, height, buffer);
+    return Py_BuildValue("(ii)N", width, height, buffer);
 
 error:
     PyErr_SetString(PyExc_IOError, "screen grab failed");

ValueError: box offset can't be negative
### What did you do?
I wanted to transform a PNG file using `PIL.ImageOps.fit()`.

### What did you expect to happen?
I expected to get back the transformed image.

### What actually happened?
```
Traceback (most recent call last):
  File "example.py", line 6, in <module>
    PIL.ImageOps.fit(img, (600, 453), PIL.Image.ANTIALIAS)
  File ".../lib/python3.7/site-packages/PIL/ImageOps.py", line 445, in fit
    return image.resize(size, method, box=crop)
  File ".../lib/python3.7/site-packages/PIL/Image.py", line 1892, in resize
    return self._new(self.im.resize(size, resample, box))
ValueError: box offset can't be negative
```

This exception seems to be dependent on the size of the image `(1000, 755)` and the target size `(600, 453)`. In this case the value for `box` gets `(-5.684341886080802e-14, 0.0, 1000.0, 755.0)` which leads to the exception. (The attached PNG is not the original one where the problem happened in production but an arbitrarily constructed one having the same dimensions.)

### What are your OS, Python and Pillow versions?

* OS: MacOS
* Python: 2.7 and 3.7
* Pillow: 6.1.0



```python
import PIL.Image
import PIL.ImageOps

with open('example.png', 'rb') as reader:
    img = PIL.Image.open(reader)
    PIL.ImageOps.fit(img, (600, 453), PIL.Image.ANTIALIAS)
```

![example](https://user-images.githubusercontent.com/386619/65522942-d2fd3080-deeb-11e9-9544-fadf5ec7422c.png)

diff --git a/Tests/test_file_spider.py b/Tests/test_file_spider.py
index 340208486..8a1eb6637 100644
--- a/Tests/test_file_spider.py
+++ b/Tests/test_file_spider.py
@@ -1,5 +1,4 @@
 import tempfile
-from io import BytesIO
 
 from PIL import Image, ImageSequence, SpiderImagePlugin
 
@@ -118,14 +117,3 @@ class TestImageSpider(PillowTestCase):
         for i, frame in enumerate(ImageSequence.Iterator(im)):
             if i > 1:
                 self.fail("Non-stack DOS file test failed")
-
-    # for issue #4093
-    def test_odd_size(self):
-        data = BytesIO()
-        width = 100
-        im = Image.new("F", (width, 64))
-        im.save(data, format="SPIDER")
-
-        data.seek(0)
-        im2 = Image.open(data)
-        self.assert_image_equal(im, im2)
diff --git a/Tests/test_imagegrab.py b/Tests/test_imagegrab.py
index bea7f68b3..a29bc019e 100644
--- a/Tests/test_imagegrab.py
+++ b/Tests/test_imagegrab.py
@@ -8,11 +8,7 @@ try:
 
     class TestImageGrab(PillowTestCase):
         def test_grab(self):
-            for im in [
-                ImageGrab.grab(),
-                ImageGrab.grab(include_layered_windows=True),
-                ImageGrab.grab(all_screens=True),
-            ]:
+            for im in [ImageGrab.grab(), ImageGrab.grab(include_layered_windows=True)]:
                 self.assert_image(im, im.mode, im.size)
 
         def test_grabclipboard(self):
diff --git a/Tests/test_imageops.py b/Tests/test_imageops.py
index 85529a708..2cdbbe02f 100644
--- a/Tests/test_imageops.py
+++ b/Tests/test_imageops.py
@@ -81,6 +81,16 @@ class TestImageOps(PillowTestCase):
         newimg = ImageOps.fit(hopper("RGB").resize((100, 1)), (35, 35))
         self.assertEqual(newimg.size, (35, 35))
 
+    def test_fit_same_ratio(self):
+        # The ratio for this image is 1000.0 / 755 = 1.3245033112582782
+        # If the ratios are not acknowledged to be the same,
+        # and Pillow attempts to adjust the width to
+        # 1.3245033112582782 * 755 = 1000.0000000000001
+        # then centering this greater width causes a negative x offset when cropping
+        with Image.new("RGB", (1000, 755)) as im:
+            new_im = ImageOps.fit(im, (1000, 755))
+            self.assertEqual(new_im.size, (1000, 755))
+
     def test_pad(self):
         # Same ratio
         im = hopper()

pip install -e .[dev]
parse_log_pytest
requirements.txt
apt-get update apt-get install -y gcc libjpeg-dev zlib1g-dev libtiff5-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev libharfbuzz-dev libfribidi-dev libxcb1-dev
3.9
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
alabaster==0.7.16
babel==2.17.0
black==25.1.0
blessed==1.20.0
build==1.2.2.post1
certifi==2025.1.31
charset-normalizer==3.4.1
check-manifest==0.50
click==8.1.8
coverage==7.8.0
coveralls==4.0.1
docopt==0.6.2
docutils==0.21.2
exceptiongroup==1.2.2
idna==3.10
imagesize==1.4.1
importlib_metadata==8.6.1
iniconfig==2.1.0
jarn.viewdoc==2.7
Jinja2==3.1.6
MarkupSafe==3.0.2
mypy-extensions==1.0.0
olefile==0.47
packaging==24.2
pathspec==0.12.1
-e git+https://github.com/python-pillow/Pillow.git@cabadff0e4094a7481507c25c3121f2f7b9f9c5c#egg=Pillow
platformdirs==4.3.7
pluggy==1.5.0
pycodestyle==2.13.0
pyflakes==3.3.1
Pygments==2.19.1
pyproject_hooks==1.2.0
pyroma==4.2
pytest==8.3.5
pytest-cov==6.0.0
requests==2.32.3
six==1.17.0
snowballstemmer==2.2.0
Sphinx==7.4.7
sphinx-rtd-theme==3.0.2
sphinxcontrib-applehelp==2.0.0
sphinxcontrib-devhelp==2.0.0
sphinxcontrib-htmlhelp==2.1.0
sphinxcontrib-jquery==4.1
sphinxcontrib-jsmath==1.0.1
sphinxcontrib-qthelp==2.0.0
sphinxcontrib-serializinghtml==2.0.0
tomli==2.2.1
trove-classifiers==2025.3.19.19
typing_extensions==4.13.0
urllib3==2.3.0
wcwidth==0.2.13
zipp==3.21.0

name: Pillow
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - alabaster==0.7.16
      - babel==2.17.0
      - black==25.1.0
      - blessed==1.20.0
      - build==1.2.2.post1
      - certifi==2025.1.31
      - charset-normalizer==3.4.1
      - check-manifest==0.50
      - click==8.1.8
      - coverage==7.8.0
      - coveralls==4.0.1
      - docopt==0.6.2
      - docutils==0.21.2
      - exceptiongroup==1.2.2
      - idna==3.10
      - imagesize==1.4.1
      - importlib-metadata==8.6.1
      - iniconfig==2.1.0
      - jarn-viewdoc==2.7
      - jinja2==3.1.6
      - markupsafe==3.0.2
      - mypy-extensions==1.0.0
      - olefile==0.47
      - packaging==24.2
      - pathspec==0.12.1
      - platformdirs==4.3.7
      - pluggy==1.5.0
      - pycodestyle==2.13.0
      - pyflakes==3.3.1
      - pygments==2.19.1
      - pyproject-hooks==1.2.0
      - pyroma==4.2
      - pytest==8.3.5
      - pytest-cov==6.0.0
      - requests==2.32.3
      - six==1.17.0
      - snowballstemmer==2.2.0
      - sphinx==7.4.7
      - sphinx-rtd-theme==3.0.2
      - sphinxcontrib-applehelp==2.0.0
      - sphinxcontrib-devhelp==2.0.0
      - sphinxcontrib-htmlhelp==2.1.0
      - sphinxcontrib-jquery==4.1
      - sphinxcontrib-jsmath==1.0.1
      - sphinxcontrib-qthelp==2.0.0
      - sphinxcontrib-serializinghtml==2.0.0
      - tomli==2.2.1
      - trove-classifiers==2025.3.19.19
      - typing-extensions==4.13.0
      - urllib3==2.3.0
      - wcwidth==0.2.13
      - zipp==3.21.0
prefix: /opt/conda/envs/Pillow

Tests/test_imageops.py::TestImageOps::test_fit_same_ratio
Tests/test_file_spider.py::TestImageSpider::test_invalid_file Tests/test_file_spider.py::TestImageSpider::test_isInt_not_a_number Tests/test_file_spider.py::TestImageSpider::test_isSpiderImage Tests/test_file_spider.py::TestImageSpider::test_loadImageSeries Tests/test_file_spider.py::TestImageSpider::test_loadImageSeries_no_input Tests/test_file_spider.py::TestImageSpider::test_n_frames Tests/test_file_spider.py::TestImageSpider::test_nonstack_dos Tests/test_file_spider.py::TestImageSpider::test_nonstack_file Tests/test_file_spider.py::TestImageSpider::test_sanity Tests/test_file_spider.py::TestImageSpider::test_save Tests/test_file_spider.py::TestImageSpider::test_tell Tests/test_file_spider.py::TestImageSpider::test_tempfile Tests/test_file_spider.py::TestImageSpider::test_unclosed_file Tests/test_imagegrab.py::TestImageGrabImport::test_import Tests/test_imageops.py::TestImageOps::test_1pxfit Tests/test_imageops.py::TestImageOps::test_colorize_2color Tests/test_imageops.py::TestImageOps::test_colorize_2color_offset Tests/test_imageops.py::TestImageOps::test_colorize_3color_offset Tests/test_imageops.py::TestImageOps::test_exif_transpose Tests/test_imageops.py::TestImageOps::test_pad Tests/test_imageops.py::TestImageOps::test_pil163 Tests/test_imageops.py::TestImageOps::test_sanity Tests/test_imageops.py::TestImageOps::test_scale
src/PIL/ImageOps.py src/PIL/SpiderImagePlugin.py docs/reference/ImageGrab.rst src/PIL/ImageGrab.py src/display.c CHANGES.rst docs/releasenotes/6.2.0.rst
src/PIL/ImageOps.py src/PIL/SpiderImagePlugin.py docs/reference/ImageGrab.rst src/PIL/ImageGrab.py src/display.c CHANGES.rst docs/releasenotes/6.2.0.rst