Как заменить в HTML-тексте все изображения

Допустим у нас есть содержимое страницы с изображениями, которые необходимо заменить на миниатюры.

Далее привожу код функции:

/**
 * Выделяем из текста все изображения и заменяем на уменьшенные
 * @param $content
 *   Содержимое ноды
 */
function _change_img($content) {
    // Создаём объект класса DOMDocument
    $doc = new DOMDocument();
    // Разбираем HTML
    $doc->loadHTML($content);

    // Находим все изображения
    $tags = $doc->getElementsByTagName('img');
    foreach ($tags as $tag) {
        // Получаем ссылку на изображение в формате URI и заносим в массив $uri
        // Учтите, что в данном примере считаем, что все ссылки являются относительными
        // Функцией str_replace убираем строку "/sites/default/files/", иначе будет сформирован неправильный uri
        $uri[] = file_build_uri(str_replace('/sites/default/files/', '', $tag->getAttribute('src')));
    }
    
    // Используя регулярные выражения, находим все изображения в ноде и заносим их в массив $old_img
    preg_match_all("/<img[^>]+\>/i", $content, $old_img);
    
    // Число изображений
    $count_uri = count($uri);
    for ($i = 0; $i < $count_uri; $i++) {
        // Применяем стиль изображения thumbnail
        // В итоге получаем массив с новыми изображениями, готовыми для вывода
        $new_img[] = theme('image_style', array('path' => $uri[$i], 'style_name' => 'thumbnail'));
    }
    
    // Заменяем все старые изображения, занесенные в массив $old_img, на новые (массив $new_img)
    $output = str_replace($old_img[0], $new_img, $content);

    return $output;
}

Теги: