Почему этот тег xml показывает изображение как большую строку? [Дубликат]

Вам нужно сначала создать URI, например:

    String urlStr = "http://www.example.com/CEREC® Materials & Accessories/IPS Empress® CAD.pdf"
    URL url= new URL(urlStr);
    URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());

Затем преобразовать эту строку Uri в ASCII:

    urlStr=uri.toASCIIString();

Теперь ваша строка url полностью закодирована, простое кодирование url, а затем мы преобразовали его в ASCII String, чтобы убедиться, что в строке нет символа вне US-ASCII. Это как раз то, как делают браузеры.

278
задан dda 7 January 2017 в 08:28
поделиться

11 ответов

Мой подозреваемый - это, конечно, фактические данные base64, в противном случае это выглядит хорошо для меня. См. эту скрипту , где работает аналогичная схема. Вы можете попробовать указать набор символов.

<div>
    <p>Taken from wikpedia</p>
    <img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
    9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" />
</div> 

Вы можете попробовать этот декодер base64 , чтобы узнать, правильны ли ваши данные base64 или нет.

348
ответ дан Sampath 18 August 2018 в 03:38
поделиться
  • 1
    спасибо за то, что нашли время ответить на мой вопрос ... что js fiddle просто выводит красную точку ?? это то, что он должен делать? – Christopher 14 December 2011 в 07:11
  • 2
    @Christopher, да - это URI данных для изображения с красной точкой (источник: ru.wikipedia.org/wiki/Data_URI_scheme ). Я просто указываю, что нет очевидной проблемы в том, что вы делаете, за исключением, может быть, фактических данных base64. Используйте данный декодер и сохраните декодированные двоичные данные в виде файла jpeg и попытайтесь открыть его. Если он не работает, в вашей кодировке base64 возникает проблема. – VinayC 14 December 2011 в 07:17
  • 3
    Я считаю, что я обнаружил, что проблема заключается в том, когда файл base64 загружается каждые «+». кажется, удаляется. Какой стажер аннулирует jpeg. Я отправляю изображение с устройства на сервер с помощью AJAX, возможно ли, что & quot; + & quot; не передается правильно, потому что это htmlentity? – Christopher 14 December 2011 в 09:18
  • 4
    @Christopher, & quot; + & quot; персонаж может быть проблематичным в пост-данных. См. Этот связанный вопрос SO: stackoverflow.com/questions/1373414/… – VinayC 14 December 2011 в 13:07
  • 5
    Спасибо, что твоя скрипка отлично работает – Vivek 29 June 2015 в 08:13

Кажется, в вашем URL-адресе есть некоторая ошибка.

Вы можете использовать этот онлайн-инструмент base64 encode / base64 decode для кодирования ваших изображений для embeding: http://base64online.org/encode/

Установите флажок «Формат как URL-адрес данных» для форматирования данных base64 как URL.

1
ответ дан Brig Ader 18 August 2018 в 03:38
поделиться

Символ +, встречающийся в URI данных, должен быть закодирован как% 2B. Это похоже на кодирование любой другой строки в URI. Например, разделители аргументов (? И & amp;) должны быть закодированы, когда URI с аргументом отправляется как часть другого URI.

4
ответ дан David Spector 18 August 2018 в 03:38
поделиться

То, что я сделал, - это конец url с img.jpg, чтобы избежать кэширования и потерять возможность проверить, открыл ли клиент электронное письмо, полный URL-адрес выглядит как «http://midomain.com/<Random letters numbers>/img.jpg»

Использование случайных в качестве части URL, Google не будет кэшировать изображение. Важной частью является конец URL с допустимым именем изображения с расширением.

Это мой код Symfony (я думаю, что это тоже хорошо для голого PHP) для отправки изображения.

$im = imagecreatetruecolor(1,1);
$white = imagecolorallocate($im, 255, 255, 255);
imagesetpixel ($im , 0 , 0 , $white);
header('Content-Type: image/jpeg');
// Output the image
imagejpeg($im);
// Free up memory
imagedestroy($im);
exit;

exit очень важен, так что PHP ничего не посылает.

21
ответ дан dda 18 August 2018 в 03:38
поделиться
  • 1
    Вы написали свой ответ в неправильном окне? Это читается как ответ на совершенно другой вопрос. – Stewart 10 January 2016 в 17:36
  • 2
    Отличное решение проблемы кэширования IOS UIWebView, которая содержала ссылки на старые данные изображения, даже если я удалил файлы изображений. Этот ответ помог мне избежать создания уникальных имен файлов и последующей очистки. Благодарю вас @ NARGIS PARWEEN – Ed of the Mountain 9 March 2017 в 23:42

В соответствии с синтаксисом схемы URI данных вам необходимо указать правильный тип содержимого, кодирование содержимого и кодировку, например

 data:image/jpeg;charset=utf-8;base64, 

:

 data:[<media type>][;charset=<character set>][;base64],<data>

Также см. http://danielmclaren.com/node/90

29
ответ дан lmiguelmh 18 August 2018 в 03:38
поделиться
  • 1
    stackoverflow.com/questions/13265902/… предполагает, что нет заголовка для кодирования тела HTTP с использованием base-64. – Dan Dascalescu 19 April 2015 в 03:56
  • 2
    Кроме того, stackoverflow.com/questions/7285372/… - это заголовок MIME, а не HTTP-код. Можете ли вы рассказать о том, как конкретно следует указывать кодировку содержимого? – Dan Dascalescu 19 April 2015 в 04:26
  • 3
    Это решило проблему для меня. Chrome предположил бы UTF-8 и покажет изображения, в то время как Microsoft Edge просто не сможет отобразить. Как только я включил кодировку, изображения показали отлично. – Aunt Jemima 14 February 2017 в 19:13
  • 4
    Можно ли использовать input вместо img? Я хочу показать значение на ярлыке или текстовом поле вместо изображения. – Mr.Hyde 26 July 2018 в 05:29

вы можете поместить свои данные непосредственно в статусе url, например

src = 'url(imageData)' ;

, и для получения данных изображения вы можете использовать функцию php

$imageContent = file_get_contents("imageDir/".$imgName);

$imageData = base64_encode($imageContent);

, чтобы вы могли копировать вставьте значение imageData и вставьте его прямо в свой URL-адрес и назначьте его атрибуту src вашего изображения

4
ответ дан MolhamStein 18 August 2018 в 03:38
поделиться

Будет показано изображение базовых 64 данных:

<style>
.logo {
            width: 290px;
            height: 63px;
            background: url(data:image/png;base64,copy-paste-base64-data-here) no-repeat;
        }
</style>

<div class="logo"/>
6
ответ дан Nalan Madheswaran 18 August 2018 в 03:38
поделиться

вы можете использовать это

$image = 'http://images.itracki.com/2011/06/favicon.png';
// Read image path, convert to base64 encoding
$imageData = base64_encode(file_get_contents($image));

// Format the image SRC:  data:{mime};base64,{data};
$src = 'data: '.mime_content_type($image).';base64,'.$imageData;

// Echo out a sample image
echo '<img src="'.$src.'">';
25
ответ дан RST 18 August 2018 в 03:38
поделиться
21
ответ дан dda 6 September 2018 в 18:23
поделиться
21
ответ дан dda 30 October 2018 в 00:11
поделиться
0
ответ дан Kevin 30 October 2018 в 00:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: