Преобразование изображения в оттенки серого в WordPress с помощью PHP

Я пытаюсь настроить плагин WordPress, в котором есть функция, которую я хочу добавить для преобразования цветных изображений в оттенки серого. Я узнал, что imagefilter($image, IMG_FILTER_GRAYSCALE) делает свое дело. Но я не могу заставить его работать.

public function stream_photo( $image_path, $src, $key, $user_id, $coord, $crop ) {
    $image = wp_get_image_editor( $image_path ); // Return an implementation that extends WP_Image_Editor

    //DEBUG
    imagefilter($image, IMG_FILTER_GRAYSCALE);

    $quality = UM()->options()->get( 'image_compression' );

    if ( ! is_wp_error( $image ) ) {
        if ( ! empty( $crop ) ) {

            if ( ! is_array( $crop ) ) {
                $crop = explode(",", $crop );
            }

            $src_x = $crop[0];
            $src_y = $crop[1];
            $src_w = $crop[2];
            $src_h = $crop[3];

            $image->crop( $src_x, $src_y, $src_w, $src_h );

            $max_w = UM()->options()->get('image_max_width');
            if ( $src_w > $max_w ) {
                $image->resize( $max_w, $src_h );
            }
        }

        //DEBUG
        //echo "Image path is: " . $image_path;
        //$image = wp_load_image($image_path);
        //imagefilter($image_path, IMG_FILTER_GRAYSCALE);

        $image->save( $image_path );

        //DEBUG
        //imagefilter($image, IMG_FILTER_GRAYSCALE);

        $image->set_quality( $quality );

        //DEBUG
        //echo "Image path is: " . $image_path;
        //$image2 = wp_load_image($image_path);
        //imagefilter($image2, IMG_FILTER_GRAYSCALE);
    } else {
        wp_send_json_error( esc_js( __( "Unable to crop stream image file: {$image_path}", 'ultimate-member' ) ) );
    }
}

Какие ошибки вы получаете? Что в нем не работает? Постарайтесь сузить круг вашей проблемы и сообщите нам, что вы обнаружите.

David Culbreth 19.07.2019 21:28

Хорошо понял. Я только что включил отладку. Ошибка: "imagefilter() ожидает, что параметр 1 будет ресурсом, объект указан в ..."

worisi24 20.07.2019 11:49

@DavidCulbreth Я избавился от ошибки, сделав это: $image_res = imagecreatefromjpeg($image_path); фильтр изображений ($ image_res, IMG_FILTER_GRAYSCALE); изображениеjpeg($image_res); Но теперь окончательное изображение появляется на веб-странице, и никакой ошибки нет. Нет в debug.log или на веб-странице.

worisi24 20.07.2019 12:37

@DavidCulbreth Когда я удалил imagejpeg($image_res); он вернулся к нормальному состоянию, как показано здесь, prnt.sc/ohnmb3, но изображение не в оттенках серого.

worisi24 20.07.2019 12:41
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
253
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в этих строках кода:

$image = wp_get_image_editor( $image_path ); // Return an implementation that extends WP_Image_Editor

//DEBUG
imagefilter($image, IMG_FILTER_GRAYSCALE);

wp_get_image_editor возвращает объект WP_Image_Editor, но фильтр изображений требует только «ресурс изображения». Изменение ниже должно работать.

$image = wp_get_image_editor( $image_path ); // Return an implementation that extends WP_Image_Editor

$im = imagecreatefrompng($image_path);
if ($im && imagefilter($im, IMG_FILTER_GRAYSCALE)){
    // Convert to grayscale
    imagefilter(imagecreatefrompng($image_path), IMG_FILTER_GRAYSCALE);
    // Save image
    imagepng($im, $image_path);
    imagedestroy($im);
}

Это для PNG, если вы поймаете все расширения изображения, а не только PNG.

Спасибо большое. Это работает, когда я размещаю ваш код в самом конце, а не после $image = wp_get_image_editor($image_path);

worisi24 24.07.2019 13:28

Другие вопросы по теме