Я пытаюсь настроить плагин 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' ) ) );
}
}
Хорошо понял. Я только что включил отладку. Ошибка: "imagefilter() ожидает, что параметр 1 будет ресурсом, объект указан в ..."
@DavidCulbreth Я избавился от ошибки, сделав это: $image_res = imagecreatefromjpeg($image_path); фильтр изображений ($ image_res, IMG_FILTER_GRAYSCALE); изображениеjpeg($image_res); Но теперь окончательное изображение появляется на веб-странице, и никакой ошибки нет. Нет в debug.log или на веб-странице.
@DavidCulbreth Когда я удалил imagejpeg($image_res); он вернулся к нормальному состоянию, как показано здесь, prnt.sc/ohnmb3, но изображение не в оттенках серого.






Проблема в этих строках кода:
$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);
Какие ошибки вы получаете? Что в нем не работает? Постарайтесь сузить круг вашей проблемы и сообщите нам, что вы обнаружите.