Uname: Linux peekpos.com 6.8.0-1060-aws #63~22.04.1-Ubuntu SMP Tue Jun 30 02:32:53 UTC 2026 x86_64
Software: Apache
PHP version: 8.3.25 [ PHP INFO ] PHP os: Linux
Server Ip: 47.130.192.226
Your Ip: 10.6.4.206
User: www (1001) | Group: www (1001)
Safe Mode: OFF
Disable Function:
passthru,putenv,chroot,chgrp,chown,shell_exec,popen,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv

name : CropModifier.php
<?php

declare(strict_types=1);

namespace Intervention\Image\Drivers\Imagick\Modifiers;

use Imagick;
use ImagickPixel;
use Intervention\Image\Interfaces\ImageInterface;
use Intervention\Image\Interfaces\SpecializedInterface;
use Intervention\Image\Modifiers\CropModifier as GenericCropModifier;

class CropModifier extends GenericCropModifier implements SpecializedInterface
{
    public function apply(ImageInterface $image): ImageInterface
    {
        // decode background color
        $background = $this->driver()->colorProcessor($image->colorspace())->colorToNative(
            $this->driver()->handleInput($this->background)
        );

        // create empty container imagick to rebuild core
        $imagick = new Imagick();

        // save resolution to add it later
        $resolution = $image->resolution()->perInch();

        // define position of the image on the new canvas
        $crop = $this->crop($image);
        $position = [
            ($crop->pivot()->x() + $this->offset_x) * -1,
            ($crop->pivot()->y() + $this->offset_y) * -1,
        ];

        foreach ($image as $frame) {
            // create new frame canvas with modifiers background
            $canvas = new Imagick();
            $canvas->newImage($crop->width(), $crop->height(), $background, 'png');
            $canvas->setImageResolution($resolution->x(), $resolution->y());
            $canvas->setImageAlphaChannel(Imagick::ALPHACHANNEL_SET); // or ALPHACHANNEL_ACTIVATE?

            // set animation details
            if ($image->isAnimated()) {
                $canvas->setImageDelay($frame->native()->getImageDelay());
                $canvas->setImageIterations($frame->native()->getImageIterations());
                $canvas->setImageDispose($frame->native()->getImageDispose());
            }

            // make the rectangular position of the original image transparent
            // so that we can later place the original on top. this preserves
            // the transparency of the original and shows the background color
            // of the modifier in the other areas. if the original image has no
            // transparent area the rectangular transparency will be covered by
            // the original.
            $clearer = new Imagick();
            $clearer->newImage(
                $frame->native()->getImageWidth(),
                $frame->native()->getImageHeight(),
                new ImagickPixel('black'),
            );
            $canvas->compositeImage($clearer, Imagick::COMPOSITE_DSTOUT, ...$position);

            // place original frame content onto prepared frame canvas
            $canvas->compositeImage($frame->native(), Imagick::COMPOSITE_DEFAULT, ...$position);

            // add newly built frame to container imagick
            $imagick->addImage($canvas);
        }

        // replace imagick in the original image
        $image->core()->setNative($imagick);

        return $image;
    }
}
© 2026 GrazzMean