imagewebp

(PHP 5 >= 5.5.0, PHP 7)

imagewebpOutput a WebP image to browser or file

Описание

bool imagewebp ( resource $image , mixed $to [, int $quality = 80 ] )

Outputs or save an WebP version of the given image.

Список параметров

image

Ресурс изображения, полученный одной из функций создания изображений, например, такой как imagecreatetruecolor().

to

Путь для сохранения файла. Если не установлен или равен NULL, изображение будет выведено в поток вывода в бинарном виде.

quality

quality ranges from 0 (worst quality, smaller file) to 100 (best quality, biggest file).

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Список изменений

Версия Описание
5.4.0 Added support for passing a stream resource to to.

Примеры

Пример #1 Saving an WebP file

<?php
// Create a blank image and add some text
$im imagecreatetruecolor(12020);
$text_color imagecolorallocate($im2331491);

imagestring($im155,  'WebP with PHP'$text_color);

// Save the image
imagewebp($im'php.webp');

// Free up memory
imagedestroy($im);
?>

Коментарии

WebP is a great file format, but it's basically supported only by Chrome. For WebP files with transparency it's necessary to have PNG fallback for other browsers (otherwise it won't work in iOS, Firefox, IE, etc.).

Regular truecolor PNG with alpha gives pretty large files, but there's a special smaller PNG file variant that can be created by pngquant - a command line utility.

If you have pngquant 1.8 on your server (just get package from official pngquant website), then you can create small fallback images (with quality better than from PHP's libgd):

<?php

/**
 * Optimizes PNG file with pngquant 1.8 or later (reduces file size of 24-bit/32-bit PNG images).
 *
 * You need to install pngquant 1.8.x on the server (ancient version 1.0 won't work).
 * There's package for Debian/Ubuntu and RPM for other distributions on http://pngquant.org
 *
 * @param $path_to_png_file string - path to any PNG file, e.g. $_FILE['file']['tmp_name']
 * @param $max_quality int - conversion quality, useful values from 60 to 100 (smaller number = smaller file)
 * @return string - content of PNG file after conversion
 */
function compress_png($path_to_png_file$max_quality 90)
{
    if (!
file_exists($path_to_png_file)) {
        throw new 
Exception("File does not exist: $path_to_png_file");
    }

   
// guarantee that quality won't be worse than that.
   
$min_quality 60;

   
// '-' makes it use stdout, required to save to $compressed_png_content variable
    // '<' makes it read from the given file path
    // escapeshellarg() makes this safe to use with any path
   
$compressed_png_content shell_exec("pngquant --quality=$min_quality-$max_quality - < ".escapeshellarg(    $path_to_png_file));

    if (!
$compressed_png_content) {
        throw new 
Exception("Conversion to compressed PNG failed. Is pngquant 1.8+ installed on the server?");
    }

    return 
$compressed_png_content;
}
?>

So for example when user is uploading a PNG file:

<?php

$read_from_path 
$_FILE['file']['tmp_name'];
$save_to_path "uploads/compressed_file.png";

$compressed_png_content compress_png($read_from_path);
file_put_contents($save_to_path$compressed_png_content);

// you don't need move_uploaded_file().

// and for webp:
imagewebp(imagecreatefrompng($read_from_path), $save_to_path ".webp");
?>

And then you can use URL with .webp version in Chrome and browsers that send Accept: image/webp, and .png for the rest (and all will get small file!)
2013-06-26 02:32:23
http://php5.kiev.ua/manual/ru/function.imagewebp.html
It is also possible to defer the creation of png replacements for WebP images to the client, with notably the library libwebpjs enabling transparent conversion.
2015-02-12 08:41:05
http://php5.kiev.ua/manual/ru/function.imagewebp.html
Автор:
As of today (end of january 2019), WebP is now supported across all the major browsers (Edge, Chrome, Firefox, Opera).
2019-02-01 21:24:44
http://php5.kiev.ua/manual/ru/function.imagewebp.html
Автор:
WebP is not yet supported by Safari, although they are experimenting with it.

Check out https://caniuse.com/#search=webp for the latest support information.
2019-11-14 09:14:12
http://php5.kiev.ua/manual/ru/function.imagewebp.html
To convert a PNG image to Webp, we can do this:

<?php

// Image
$dir 'img/countries/';
$name 'brazil.png';
$newName 'brazil.webp';

// Create and save
$img imagecreatefrompng($dir $name);
imagepalettetotruecolor($img);
imagealphablending($imgtrue);
imagesavealpha($imgtrue);
imagewebp($img$dir $newName100);
imagedestroy($img);

?>
2020-04-18 16:07:21
http://php5.kiev.ua/manual/ru/function.imagewebp.html
Автор:
Safari on mac now has limited support (limited to Safari 14+ on Big Sur or later)

Safari on iOS 14.4 and higher has full support
2021-06-24 11:47:03
http://php5.kiev.ua/manual/ru/function.imagewebp.html
Автор:
Function to save any image to Webp

public static function webpImage($source, $quality = 100, $removeOld = false)
    {
        $dir = pathinfo($source, PATHINFO_DIRNAME);
        $name = pathinfo($source, PATHINFO_FILENAME);
        $destination = $dir . DIRECTORY_SEPARATOR . $name . '.webp';
        $info = getimagesize($source);
        $isAlpha = false;
        if ($info['mime'] == 'image/jpeg')
            $image = imagecreatefromjpeg($source);
        elseif ($isAlpha = $info['mime'] == 'image/gif') {
            $image = imagecreatefromgif($source);
        } elseif ($isAlpha = $info['mime'] == 'image/png') {
            $image = imagecreatefrompng($source);
        } else {
            return $source;
        }
        if ($isAlpha) {
            imagepalettetotruecolor($image);
            imagealphablending($image, true);
            imagesavealpha($image, true);
        }
        imagewebp($image, $destination, $quality);

        if ($removeOld)
            unlink($source);

        return $destination;
    }
2022-02-09 18:18:09
http://php5.kiev.ua/manual/ru/function.imagewebp.html

    Поддержать сайт на родительском проекте КГБ