Мгновенный просмотр Telegram: не удается загрузить изображения .webp и .ico
У меня возникла проблема при попытке создать мой шаблон мгновенного просмотра Telegram с этой ошибкой:
Resource fetch failed: https://gdude.de/blog/assets/images/Kaggle-Lyft/task.webp
Resource fetch failed: https://gdude.de/blog/assets/images/telegram.ico
URL-адреса действительны, я проверил. Это единственные два изображения, которые терпят неудачу. Поддерживает ли IV изображения * .webp и * .ico?
3 ответа
Согласно их руководству, Instant View на самом деле поддерживает только gif, jpg и png.
с атрибутом src и необязательным атрибутом href, чтобы сделать изображение интерактивным. Допустимые форматы: GIF, JPG, PNG (GIF будет преобразован в тип видео с помощью IV)
Я обнаружил, что imageoptim полезен для бесплатной конвертации (в моем случае) изображений svg. Просто добавьте этот URL-адрес к URL-адресу svg, и они начнут загружаться. Я выбрал разрешение 2560, так как это максимальное разрешение, которое поддерживает IV 2.1 .
@set_attr(src, "https://img.gs/<your-username>/2560,fit,format=png,quality=high/", ./@src): $body//img[contains(@src, ".svg")]
@set_attr(srcset, "https://img.gs/<your-username>/2560,fit,format=png,quality=high/", ./@srcset): $body//img[contains(@srcset, ".svg")]
У меня была аналогичная проблема, и я решил ее следующим образом.
Примечание. Вам нужен хостинг-сервер для хранения PHP-скрипта, у меня сработал бесплатный (000Webhost).
Диаграмма ниже представляет общую идею
Код мгновенного просмотра
Примечание. Я новичок в Instant View и XPath, поэтому пока просто пишу код, который работает.
# Find unsupported images
$imgs: //img[ends-with(@src, ".webp")]
$imgs+: //img[ends-with(@src, ".ico")]
# Temporary element to create the URLs and make calls to the conversion service
@html_to_dom: "<a>"
$tmp_tag
# For each unsupported image
@map($imgs){
$img: $@
# Build de URL to request the image conversion service
@set_attr(href, "https://my-free-subdom.000webhostapp.com/imgconverter.php?url=", $img/@src): $tmp_tag/a
# Make the request
@load: $tmp_tag/a/@href
# Change the src of the unsupported image to that of the converted image created by the conversion service
@set_attr(src, $@//img/@src): $img
}
@remove: $tmp_tag
PHP-скрипт для преобразования изображения
Для обработки файлов ICO я использовал библиотеку IcoFileLoader , которую я нашел благодаря этому вопросу обработки PHP GD .ico . Я просто взял файлы PHP из каталога src и разместил их прямо на своем хостинге, поэтому мне пришлось использовать простой автозагрузчик .
// The URL of the image to convert
// If the url of the image is relative, you have
// to build it here, example $url = 'https://gdude.de'.$_GET['url'];
$url = $_GET['url'];
// File name
$file_name = basename($url);
// Directory where the image will be saved
$dir = './';
// File location
$save_file_loc = $dir . $file_name;
// Open file
$fp = fopen($save_file_loc, 'wb');
// Download the image using CURL
$ch = curl_init($url);
// Set options for a cURL transfer
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
// Close file
fclose($fp);
// Load the image
// ICO images need special handling
if(str_ends_with($file_name, '.ico'))
{
require_once('Autoloader.php');
$loader = new IcoFileService;
// You must define the size, I did the tests with a 16X16 favicon.
$im = $loader->extractIcon($file_name, 16, 16);
}
else if(str_ends_with($file_name, '.webp'))
{
$im = imagecreatefromwebp($file_name);
}
// Check if the image was loaded
if(!isset($im))
{
die('Unable to load image!');
}
// Convert it to a png file
imagepng($im, $file_name.'.png');
imagedestroy($im);
// Delte the original image
unlink($file_name);
// "Return" the image in an HTML tag so that Instant View can handle it
echo '<img src="https://my-free-subdom.000webhostapp.com/' . $file_name . '.png">';
Вы можете улучшить приведенный выше код, возможно, добавить некоторую безопасность, удалить старые изображения, использовать другие библиотеки или функции PHP, принимать несколько изображений в одном запросе и т. д.