I have used it for a client that needs visual reprensentations to where the pains are located in the body. What is your use case? This field will produce a base-64 image and automatically convert it to a file stored in your configured storage disk, returning the URL to the image.
You can install the package via composer:
composer require ruelluna/canvas-pointerCanvasPointerField::make('body-points')
->pointRadius(15) // default is 5
->imageUrl('your image source')
->width(800) // required
->height(800) // required
->storageDisk('public') // default is 'public'
->storageDirectory('canvas-pointer') // default is 'canvas-pointer'
->label('Select body parts that are in pain'),By default, the component saves images to the 'public' disk in the 'canvas-pointer' directory. You can customize these settings using the storageDisk() and storageDirectory() methods.
CanvasPointerField::make('body-points')
->storageDisk('s3') // Use Amazon S3 storage
->storageDirectory('images/pointers') // Custom directory pathBoth storage disk and directory can be set dynamically using closures:
CanvasPointerField::make('body-points')
->storageDisk(fn () => config('filesystems.default')) // Use the default disk from config
->storageDirectory(function (Get $get) {
// Use a different directory based on the user or other form data
$userId = $get('user_id');
return "users/{$userId}/pointers";
})This allows you to customize the storage location based on runtime conditions, such as the current user, tenant, or other form data.
The Canvas Pointer field handles the image creation process automatically:
-
Canvas Interaction: When users click on the image, red dots are added to mark specific points.
-
Base64 Image Generation: After each interaction, the canvas (including the background image and all marked points) is converted to a base64-encoded image using Konva.js's
toDataURL()method. -
Automatic File Conversion: When the form is submitted, the component:
- Detects that the field value is a base64 image
- Removes the base64 prefix (
data:image/png;base64,) - Decodes the base64 string to binary data
- Generates a unique filename using UUID
- Saves the image to the configured storage disk and directory
- Returns the public URL of the saved file
-
Database Storage: Only the image URL is stored in your database, not the large base64 string, which prevents database size issues.
Example of the saved image URL:
https://yourdomain.com/storage/canvas-pointer/550e8400-e29b-41d4-a716-446655440000.png
This process happens automatically - you don't need to write any additional code to handle the conversion from base64 to file URL.
- Automatically detect height and width
- Table Column Component
- Entry Component
-
npmKonva dependency
Please see CHANGELOG for more information on what has changed recently.
Please see CONTRIBUTING for details.
Please review our security policy on how to report security vulnerabilities.
The MIT License (MIT). Please see License File for more information.
