Last active
February 25, 2022 16:12
-
-
Save gnutix/e26cb1952368b53e148bc675cae1ce3d to your computer and use it in GitHub Desktop.
Revisions
-
Dorian Villet revised this gist
Aug 16, 2019 . No changes.There are no files selected for viewing
-
Dorian Villet created this gist
Aug 16, 2019 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,66 @@ #!/usr/bin/env php <?php declare(strict_types=1); use Imagecow\Image; use Symfony\Component\Console\Application; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Filesystem\Filesystem; set_time_limit(0); umask(0000); /** @noinspection PhpIncludeInspection */ require (static function (): string { $dir = \dirname(__DIR__); while (!file_exists($dir . '/vendor/autoload.php')) { $dir = \dirname($dir); if ('/' === $dir) { throw new \UnexpectedValueException('Can\'t find a parent folder containing Composer\'s autoloader'); } } return $dir . '/vendor/autoload.php'; })(); $command = new class('crop:balanced') extends Command { protected function configure(): void { $this ->addArgument('sourceImagePath', InputArgument::REQUIRED, 'Absolute path to the input image') ->addArgument('imagePath', InputArgument::REQUIRED, 'Absolute path to the output image') ->addArgument('width', InputArgument::REQUIRED, 'Width for the crop') ->addArgument('height', InputArgument::REQUIRED, 'Height for the crop'); } protected function execute(InputInterface $input, OutputInterface $output): void { $imagePath = $input->getArgument('imagePath'); // Here we create the directory for the destination image, otherwise Imagick will crash $directory = \dirname($imagePath); if (!file_exists($directory)) { (new Filesystem())->mkdir($directory); /** @noinspection NotOptimalIfConditionsInspection */ if (!file_exists($directory)) { throw new \RuntimeException(sprintf('Could not create folder "%s" for Imagick.', $directory)); } } Image::fromFile($input->getArgument('sourceImagePath')) ->crop($input->getArgument('width'), $input->getArgument('height'), Image::CROP_BALANCED) ->save($imagePath); } }; $application = (new Application()) ->add($command) ->getApplication() ->setDefaultCommand($command->getName(), true) ->run();