mostafaznv / larupload

Larupload is an ORM based file uploader for laravel to upload image, video, audio and other known files.
https://mostafaznv.gitbook.io/larupload/
MIT License
45 stars 5 forks source link

Unable to upload webp #16

Closed tyteen4a03 closed 7 months ago

tyteen4a03 commented 1 year ago

Whenever I try to upload webp images, I get this exception: Unable to decode image from file (/tmp/something)

Does this library support handling WebP? I checked my phpinfo and my GD is compiled with WebP support.

mostafaznv commented 1 year ago

Hi @tyteen4a03,
Yes, it supports webp. Could you provide more information?

For example, give me more details about the attachment itself, error log, your action (resize, crop, ...)
and attach your original uploaded file here.

tyteen4a03 commented 1 year ago

I narrowed down the issue a little bit more, it seems to be stuck on animated webps (I can't attach those but any animated webp will fail). Non-animated webps are fine.

Intervention\Image\Exception\NotReadableException: Unable to decode image from file (/tmp/phpj4idOM).
#93 /vendor/intervention/image/src/Intervention/Image/Gd/Decoder.php(81): Intervention\Image\Gd\Decoder::initFromPath
#92 /vendor/intervention/image/src/Intervention/Image/AbstractDecoder.php(344): Intervention\Image\AbstractDecoder::init
#91 /vendor/intervention/image/src/Intervention/Image/AbstractDriver.php(66): Intervention\Image\AbstractDriver::init
#90 /vendor/intervention/image/src/Intervention/Image/ImageManager.php(54): Intervention\Image\ImageManager::make
#89 /vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(353): Illuminate\Support\Facades\Facade::__callStatic
#88 /vendor/mostafaznv/nova-ckeditor/src/ImageStorage.php(64): Mostafaznv\NovaCkEditor\ImageStorage::resizeImage
#87 /vendor/mostafaznv/nova-ckeditor/src/ImageStorage.php(49): Mostafaznv\NovaCkEditor\ImageStorage::resize
#86 /vendor/mostafaznv/nova-ckeditor/src/ImageStorage.php(28): Mostafaznv\NovaCkEditor\ImageStorage::handleUpload
#85 /vendor/mostafaznv/nova-ckeditor/src/Storage.php(24): Mostafaznv\NovaCkEditor\Storage::__invoke
#84 [internal](0): call_user_func
#83 /vendor/laravel/nova/src/Fields/File.php(308): Laravel\Nova\Fields\File::fillAttribute
#82 /vendor/laravel/nova/src/Fields/Field.php(436): Laravel\Nova\Fields\Field::fillInto
#81 /vendor/laravel/nova/src/Fields/Field.php(412): Laravel\Nova\Fields\Field::fill
#80 /vendor/laravel/framework/src/Illuminate/Collections/HigherOrderCollectionProxy.php(60): Illuminate\Support\HigherOrderCollectionProxy::Illuminate\Support\{closure}
#79 [internal](0): array_map
#78 /vendor/laravel/framework/src/Illuminate/Collections/Arr.php(558): Illuminate\Support\Arr::map
#77 /vendor/laravel/framework/src/Illuminate/Collections/Collection.php(777): Illuminate\Support\Collection::map
#76 /vendor/laravel/framework/src/Illuminate/Collections/HigherOrderCollectionProxy.php(61): Illuminate\Support\HigherOrderCollectionProxy::__call
#75 /vendor/laravel/nova/src/FillsFields.php(100): Laravel\Nova\Resource::fillFields
#74 /vendor/laravel/nova/src/FillsFields.php(24): Laravel\Nova\Resource::fill
#73 /vendor/laravel/nova/src/Http/Controllers/ResourceStoreController.php(43): Laravel\Nova\Http\Controllers\ResourceStoreController::Laravel\Nova\Http\Controllers\{closure}
#72 /vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php(30): Illuminate\Database\Connection::transaction
#71 /vendor/laravel/nova/src/Http/Controllers/ResourceStoreController.php(62): Laravel\Nova\Http\Controllers\ResourceStoreController::__invoke
#70 /vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): Illuminate\Routing\Controller::callAction
#69 /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(43): Illuminate\Routing\ControllerDispatcher::dispatch
#68 /vendor/sentry/sentry-laravel/src/Sentry/Laravel/Tracing/Routing/TracingControllerDispatcherTracing.php(21): Sentry\Laravel\Tracing\Routing\TracingControllerDispatcherTracing::Sentry\Laravel\Tracing\Routing\{closure}
#67 /vendor/sentry/sentry-laravel/src/Sentry/Laravel/Tracing/Routing/TracingRoutingDispatcher.php(19): Sentry\Laravel\Tracing\Routing\TracingRoutingDispatcher::wrapRouteDispatch
#66 /vendor/sentry/sentry-laravel/src/Sentry/Laravel/Tracing/Routing/TracingControllerDispatcherTracing.php(20): Sentry\Laravel\Tracing\Routing\TracingControllerDispatcherTracing::dispatch
#65 /vendor/laravel/framework/src/Illuminate/Routing/Route.php(260): Illuminate\Routing\Route::runController
#64 /vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\Routing\Route::run
#63 /vendor/laravel/framework/src/Illuminate/Routing/Router.php(799): Illuminate\Routing\Router::Illuminate\Routing\{closure}
#62 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\Pipeline\Pipeline::Illuminate\Pipeline\{closure}
#61 /vendor/laravel/nova/src/Http/Middleware/Authorize.php(18): Laravel\Nova\Http\Middleware\Authorize::handle
#60 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Pipeline\Pipeline::Illuminate\Pipeline\{closure}
#59 /vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(57): Illuminate\Auth\Middleware\Authenticate::handle
#58 /vendor/laravel/nova/src/Http/Middleware/Authenticate.php(31): Laravel\Nova\Http\Middleware\Authenticate::handle
#57 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Pipeline\Pipeline::Illuminate\Pipeline\{closure}
#56 /vendor/laravel/nova/src/Http/Middleware/BootTools.php(20): Laravel\Nova\Http\Middleware\BootTools::handle
#55 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Pipeline\Pipeline::Illuminate\Pipeline\{closure}
#54 /vendor/laravel/nova/src/Http/Middleware/DispatchServingNovaEvent.php(33): Laravel\Nova\Http\Middleware\DispatchServingNovaEvent::handle
#53 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Pipeline\Pipeline::Illuminate\Pipeline\{closure}
#52 /vendor/inertiajs/inertia-laravel/src/Middleware.php(87): Inertia\Middleware::handle
#51 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Pipeline\Pipeline::Illuminate\Pipeline\{closure}
#50 /app/Http/Middleware/AutoIpAddress.php(28): App\Http\Middleware\AutoIpAddress::handle
#49 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Pipeline\Pipeline::Illuminate\Pipeline\{closure}
#48 <hidden>
#47 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Pipeline\Pipeline::Illuminate\Pipeline\{closure}
#46 /vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(78): Illuminate\Foundation\Http\Middleware\VerifyCsrfToken::handle
#45 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Pipeline\Pipeline::Illuminate\Pipeline\{closure}
#44 /vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\View\Middleware\ShareErrorsFromSession::handle
#43 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Pipeline\Pipeline::Illuminate\Pipeline\{closure}
#42 /vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\Session\Middleware\StartSession::handleStatefulRequest
#41 /vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\Session\Middleware\StartSession::handle
#40 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Pipeline\Pipeline::Illuminate\Pipeline\{closure}
#39 /vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::handle
#38 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Pipeline\Pipeline::Illuminate\Pipeline\{closure}
#37 /vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\Cookie\Middleware\EncryptCookies::handle
#36 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Pipeline\Pipeline::Illuminate\Pipeline\{closure}
#35 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\Pipeline\Pipeline::then
#34 /vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\Routing\Router::runRouteWithinStack
#33 /vendor/laravel/framework/src/Illuminate/Routing/Router.php(777): Illuminate\Routing\Router::runRoute
#32 /vendor/laravel/framework/src/Illuminate/Routing/Router.php(741): Illuminate\Routing\Router::dispatchToRoute
#31 /vendor/laravel/framework/src/Illuminate/Routing/Router.php(730): Illuminate\Routing\Router::dispatch
#30 /vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\Foundation\Http\Kernel::Illuminate\Foundation\Http\{closure}
#29 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\Pipeline\Pipeline::Illuminate\Pipeline\{closure}
#28 /vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/SetRequestIpMiddleware.php(45): Sentry\Laravel\Http\SetRequestIpMiddleware::handle
#27 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Pipeline\Pipeline::Illuminate\Pipeline\{closure}
#26 /vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/SetRequestMiddleware.php(31): Sentry\Laravel\Http\SetRequestMiddleware::handle
#25 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Pipeline\Pipeline::Illuminate\Pipeline\{closure}
#24 /vendor/laravel/nova/src/Http/Middleware/ServeNova.php(23): Laravel\Nova\Http\Middleware\ServeNova::handle
#23 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Pipeline\Pipeline::Illuminate\Pipeline\{closure}
#22 /app/Http/Middleware/SentryMw.php(27): App\Http\Middleware\SentryMw::handle
#21 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Pipeline\Pipeline::Illuminate\Pipeline\{closure}
#20 /app/Http/Middleware/GlobalFrameOptions.php(19): App\Http\Middleware\GlobalFrameOptions::handle
#19 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Pipeline\Pipeline::Illuminate\Pipeline\{closure}
#18 /vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\Http\Middleware\TrustProxies::handle
#17 /app/Http/Middleware/TrustProxies.php(33): App\Http\Middleware\TrustProxies::handle
#16 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Pipeline\Pipeline::Illuminate\Pipeline\{closure}
#15 /vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Foundation\Http\Middleware\TransformsRequest::handle
#14 /vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::handle
#13 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Pipeline\Pipeline::Illuminate\Pipeline\{closure}
#12 /vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Foundation\Http\Middleware\TransformsRequest::handle
#11 /vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\Foundation\Http\Middleware\TrimStrings::handle
#10 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Pipeline\Pipeline::Illuminate\Pipeline\{closure}
#9 /vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Foundation\Http\Middleware\ValidatePostSize::handle
#8 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Pipeline\Pipeline::Illuminate\Pipeline\{closure}
#7 /vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(99): Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance::handle
#6 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Pipeline\Pipeline::Illuminate\Pipeline\{closure}
#5 /vendor/sentry/sentry-laravel/src/Sentry/Laravel/Tracing/Middleware.php(87): Sentry\Laravel\Tracing\Middleware::handle
#4 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Pipeline\Pipeline::Illuminate\Pipeline\{closure}
#3 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\Pipeline\Pipeline::then
#2 /vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\Foundation\Http\Kernel::sendRequestThroughRouter
#1 /vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\Foundation\Http\Kernel::handle
#0 /public/index.php(52): null
mostafaznv commented 1 year ago

Thanks for your report. I will check it tomorrow (it’s 1 AM here 😄).

It would be nice if you could attach any animated webp that causes the error

tyteen4a03 commented 1 year ago

GitHub doesn't allow for that, so the easiest way to reproduce is to grab a gif on giphy, download it, convert on a service such as ezgif, and upload it to Laravel.

mostafaznv commented 1 year ago

Hi @tyteen4a03,

I've investigated the issue, and it appears to be related to libgd. It seems that gd doesn't support animated webp images. You can find more information in these references: 1, 2, 3.

I recommend using Imagick as your image processing library. I've tested it, and it worked like a charm.