🔎

Imagick та зображення base64

У мене є зображення у форматі base64, але після створення екземпляру класу:
new Imagick($source)
видається помилка:
Uncaught ImagickException: Invalid filename provided in ...
Підкажіть у чому помилка, будь ласка.
php
1 відповідь
  • Дмитро
    Припускаю, що у вас зображення у форматі base64 має наступний вигляд:
    data:image\/jpg;base64,\/9j\/4AAQSkZJRgABAQEAYABgAAD\/\/gA+Q1JFQVRPUjogZ2QtanBlZyB2.
    Щоб екземпляр класу успішно створився, необхідно видалити ділянку коду:
    data:image\/jpg;base64,
    Оскільки зображення може бути у декількох форматах, необхідно видалити всі за допомогою регулярного виразу:
    $source = preg_replace('#^data:image/[^;]+;base64,#', '', $source)
    Трішки удосконаливши код необхідними функціями вийде наступне:
    if (count(explode(',', $source)) == 2) {
    $source = preg_replace('#^data:image/[^;]+;base64,#', '', $source);
    $imageBlob = base64_decode($source);
    $iMagick = new Imagick();
    $iMagick->readImageBlob($imageBlob);
    } else {
    $iMagick = new Imagick($source);
    }