Evolutionizing Image Manipulation: Unleashing the Power of Intervention Image in PHP

I ntroducing Intervention Image, a game-changing open-source PHP library designed to streamline image handling and manipulation. Say goodbye to cumbersome processes and hello to a world of effortless image editing.

Evolutionizing Image Manipulation: Unleashing the Power of Intervention Image in PHP
Introducing Intervention Image, a game-changing open-source PHP library designed to streamline image handling and manipulation. Say goodbye to cumbersome processes and hello to a world of effortless image editing. With Intervention Image, creating, editing, and composing images becomes a breeze. Whether you're generating image thumbnails, adding watermarks, or formatting large image files, this library empowers you to tackle every task with ease, minimizing the lines of code required. Built with simplicity and expressiveness in mind, Intervention Image elevates PHP image manipulation to new heights. Embracing the industry-standard PSR-2 FIG standard, it ensures seamless interoperability with shared PHP code while boasting comprehensive unit testing for reliability. Join the movement and unlock the full potential of image manipulation with Intervention Image. It's time to transform your PHP projects into visual masterpieces effortlessly.

How to install image intervention  package in Laravel ?


        "intervention/image": "^2.7",

Image intervation package steps: * Image intervention package link * 1st step ----------------------------------------- composer require intervention/image ----------------------------------------- * open config app.php file open scroll page in package serveice provider area * 2nd step ----------------------------------------- Intervention\Image\ImageServiceProvider::class, ----------------------------------------- * Add the facade of this package to the $aliases array. * 3rd step ----------------------------------------- 'Image' => Intervention\Image\Facades\Image::class ----------------------------------------- * then Save & publish image intervation in project php artisan vendor:publish --provider="Intervention\Image\ImageServiceProviderLaravelRecent"

Image Upload Helper:


<?php

namespace App\Http\Traits;

use Illuminate\Support\Str;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage;
use Image;
// use Intervention\Image\Facades\Image;

use Tinify\Tinify;

trait ImageUploadTrait
{

    public function uploadOne(UploadedFile $uploadedFile, $folder = null, $disk = 'public')
    {
        // Generate a unique name for the image
        $currentMonth = date('m');
        $currentYear = date('Y');
        $filetype   =  $uploadedFile->getMimeType();
        $file_name =   $currentMonth  . '_' . $currentYear . '_' . strtoupper(uniqid()) . '.' . $uploadedFile->getClientOriginalExtension();
        $new_file_name =   $currentMonth  . '_' . $currentYear . '_' . strtoupper(uniqid()) . '.' . 'webp';

        try {
            // Set the API key
            // $apiKey = config('services.tinify.key');
            // Set the API key config('services.tinify.key')
            $apiKey = '';
            $originalSize =0;
            $compressedSize =0;
             // Check if Tinify API key is valid
            if ($apiKey ) {
                Tinify::setKey($apiKey);
                 \Tinify\validate();
                  // Get original image size
                $originalSize = filesize($uploadedFile->path());
                // Compress the image
                $filePath =  Storage::path('public/' . $folder . '/' . $file_name);
                $source = \Tinify\fromFile($uploadedFile->path());
                // $copyrighted = $source->preserve("copyright", "creation");
                $source->toFile($filePath);
                $compressedSize = filesize($filePath);
                $file_size =   'Image compressed successfully! Original size: ' . number_format($originalSize, 0, '.', ',') . ' bytes, Compressed size: ' . number_format($compressedSize, 0, '.', ',') . ' bytes';
                Log::info($file_size);
            }
            else {
                  // If Tinify API key is not provided or invalid, save the image without compression
                $file_size =   'Tinify API key is not provided or invalid';
                Log::info($file_size);
                // $uploadedFile->storeAs($folder, $file_name, $disk);
                $image = Image::make($uploadedFile)->orientate()->encode('webp');
                $filePath = $folder ? $folder . '/' . $new_file_name : $new_file_name;
                Storage::disk($disk)->put($filePath, $image->stream());
            }
        } catch (\Exception $e) {
              // Log compression errors
              Log::error('Tinify Error: ' . $e->getMessage());
        }

        $filePathOnly = $folder;
        // Get the path where you want to save the image and thumbnail
        $directory = storage_path('app/public/' . $folder);
        // Check if the directory exists, if not, create it
        if (!File::exists($directory)) {
            File::makeDirectory($directory, 0755, true, true);
        }
        $image = Image::make($uploadedFile);
         $image->orientate();
        Log::info('Original Image width & height: ' . $image->width() . 'x' . $image->height());
       $thumbnail = Image::make($uploadedFile)->fit(100, 75)
            ->blur(10)->orientate()->encode('webp');
        // ======== Text on image =======
        $thumbnail->text('Thumbnail Image', $thumbnail->width() / 2, $thumbnail->height() / 2, function ($font) {
            $font->file(public_path('font/font.ttf'));
            // $font->color([255, 0, 0]); // Red color
            $font->color([255, 255, 255, 0.5]);
            $font->size(12);
            $font->align('center'); // Align text to center
            $font->valign('middle'); // Vertically align text to the middle
            $font->angle(33); // Angle of text (33 degrees)
        });
        // ======== Text on image =======
        Log::info('Resized Image  width & height: ' . $thumbnail->width() . 'x' . $thumbnail->height());
        $thumbnailName = 'thumb_' . $new_file_name;
        $thumbnail->save($directory . '/' . $thumbnailName);
        return [
            'file_name' => $new_file_name,
            'thumbnail_name' => $thumbnailName,
            'filepath' => $filePathOnly, // This will contain the path relative to the storage disk
            'filetype' => $filetype,
            'originalSize' => number_format($originalSize, 0, '.', ',') ,
            'compressSize' => number_format($compressedSize, 0, '.', ',')

           

        ];
    }

    public function deleteImage($filename, $folder = null, $disk = 'public')
    {
        // Delete the original image
        $filePath = $folder ? $folder . '/' . $filename : $filename;
        Storage::disk($disk)->delete($filePath);

        // Delete the thumbnail
        $thumbnailName = 'thumb_' . $filename;
        $thumbnailPath = 'uploads/thumbnail/' . $thumbnailName;
        if (File::exists(public_path($thumbnailPath))) {
            File::delete(public_path($thumbnailPath));
        }
    }
    // Now, if you want to delete the image and its thumbnail:
    // $this->deleteImage($imageInfo['file_name'], $imageInfo['filepath'], $disk);

    public function unlinkBlogImage($model, $imageField = 'image', $thumbnailField = 'thumbnail', $folder)
   
    {
        $imagePath = Storage::path('public/' . $folder . '/' . $model->$imageField);
        if (File::exists($imagePath) && isset($model->$imageField)) {
            unlink($imagePath);
            Log::info('main  Image Deleted');
        }

        $thumbnailpath = Storage::path('public/' . $folder . '/' . $model->$thumbnailField);
        if (File::exists($thumbnailpath) && isset($model->$thumbnailField)) {
            unlink($thumbnailpath);
            Log::info('thumbnail Image Deleted');
        }
    }

    public function unlinkImage($model, $imageField = 'image', $folder)
   
    {
        $imagePath = Storage::path('public/' . $folder . '/' . $model->$imageField);
        if (File::exists($imagePath) && isset($model->$imageField)) {
            unlink($imagePath);
            Log::info('Page  Image Deleted');
        }
        $thumbnailpath = Storage::path('public/' . $folder . '/' . 'thumb_'.$model->$imageField);
        if (File::exists($thumbnailpath) && isset($model->$imageField)) {
            unlink($thumbnailpath);
            Log::info('thumbnail Image Deleted');
        }
   
    }
    // in livewire method area can use below method
    // $model = BlogPost::find($this->blog_id );
    // $folder = '/blogimages';
    // $this->unlinkBlogImage($model, 'image', 'thumbnail' ,$folder);

    public function myAlert($notification)
    {
        $this->dispatch('showToastMesssage', $notification);
    }

    public function myConfirm($title, $message, $event)
    {

        $this->dispatch(
            'swal:confirm',
            icon: "warning",
            text: "{$title}",
            message: "{$message}",
            confirmEvent: "{$event}",
            successMessage: 'Record deleted successfully !',
        );
    }

   
    public function convertToWebP($imagePath, $outputPath)
    {

        try {
            // Open the image using Intervention Image
            $image = Image::make($imagePath);
            // Convert the image to WebP format and remove EXIF data
            $image->orientate()->encode('webp', 75);
            // Save the converted image
            Storage::put($outputPath, $image->stream());
            // Unlink (delete) the original image file
            unlink($imagePath);
            return $outputPath;
        } catch (\Exception $e) {
            // Handle any exceptions
            Log::error('Image conversion error: ' . $e->getMessage());
            return null;
        }
    }
}

in image internvation 3 


use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Gd\Driver;

// create image manager with desired driver
$manager = new ImageManager(new Driver());


public function StoreCategory(Request $request){

    if ($request->file('image')) {
        $manager = new ImageManager(new Driver());
        $name_gen = hexdec(uniqid()) . '.' . $request->file('image')->getClientOriginalExtension();
        $img = $manager->read($request->file('image'));
        $img = $img->resize(370, 246);

        $img->toJpeg(80)->save(base_path('public/upload/category/' . $name_gen));
        $imageUrl ='upload/category/' . $name_gen

    }

}
0 Comments
Leave a Comment

Video