Отображение изображения с использованием php без влияния на HTML-код - PullRequest
0 голосов
/ 20 августа 2011

У меня есть вопрос об отображении изображений с помощью функции getImage_w ($ image, $ dst_w), которая принимает URL-адрес изображения ($ image) и ширину назначения для этого изображения ($ size). Затем он заново рисует изображение, изменяя его высоту в соответствии с шириной назначения.

Это функция (в файле libs / image.php):

function getImage_w($image,$w){
       /*** get The extension of the image****/
      $ext= strrchr($image, ".");
       /***check if the extesion is a jpeg***/
        if (strtolower($ext)=='.jpg' || strtolower($ext)=='.jpeg'){
       /***send the headers****/
        header('Content-type: image/jpeg');
        /**get the source image***/
        $src_im_jpg=imagecreatefromjpeg($image);
        /****get the source image size***/
        $size=getimagesize($image);
        $src_w=$size[0];
        $src_h=$size[1];
        /****calculate the distination height based on the destination width****/
        $dst_w=$w;
        $dst_h=round(($dst_w/$src_w)*$src_h);
        $dst_im=imagecreatetruecolor($dst_w,$dst_h);
        /**** create a jpeg image with the new dimensions***/
        imagecopyresampled($dst_im,$src_im_jpg,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h);
        imagejpeg($dst_im);
}

В файле imagetest.php у меня есть эта часть кода:

<?php
require 'libs/image.php';
echo '<h1>HELLO WORLD : some html</h1>
<img src="'.displayImg_w('http://www.sanctius.net/wp-content/uploads/2010/05/Avatar-20.jpg',200).'">
';

Раньше я писал URL с параметрами $ _GET, определяющими изображение. Но теперь я хочу использовать функцию непосредственно в моем коде.

Проблема в том, что изображение отображается правильно, но HTML-код

Hello World

не переведен браузером (я знаю, что заголовок уже отправлен первым кодом) Но я хочу знать, Как правильно отобразить изображение, не влияя на HTML-код. а также без использования параметров get, которые изменяют URL изображения на эту нежелательную форму:

ЛИЭС / image.php? Изображение = http://www.example.com/image&width=200

Ответы [ 2 ]

3 голосов
/ 20 августа 2011

После моего ранее, совершенно неправильного ответа, я надеюсь восполнить это.Попробуйте этот код:

<?php

  function getImage_w($image,$w){
    // Get the extension of the file
    $file = explode('.',basename($image));
    $ext = array_pop($file);
    // These operations are the same regardless of file-type
    $size = getimagesize($image);
    $src_w = $size[0];
    $src_h = $size[1];
    $dst_w = $w;
    $dst_h = round(($dst_w/$src_w)*$src_h);
    $dst_im = imagecreatetruecolor($dst_w,$dst_h);
    // These operations are file-type specific
    switch (strtolower($ext)) {
      case 'jpg': case 'jpeg':
        $ctype = 'image/jpeg';;
        $src_im = imagecreatefromjpeg($image);
        $outfunc = 'imagejpeg';
        break;
      case 'png':
        $ctype = 'image/png';;
        $src_im = imagecreatefrompng($image);
        $outfunc = 'imagepng';
        break;
      case 'gif':
        $ctype = 'image/gif';;
        $src_im = imagecreatefromgif($image);
        $outfunc = 'imagegif';
        break;
    }
    // Do the resample
    imagecopyresampled($dst_im,$src_im,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h);
    // Get the image data into a base64_encoded string
    ob_start();
    $outfunc($dst_im);
    $imgdata = base64_encode(ob_get_contents()); // Don't use ob_get_clean() in case we're ever running on some ancient PHP build
    ob_end_clean();
    // Return the data so it can be used inline in HTML
    return "data:$ctype;base64,$imgdata";
  }

  echo '<h1>HELLO WORLD : some html</h1>
  <img src="'.getImage_w('http://www.sanctius.net/wp-content/uploads/2010/05/Avatar-20.jpg',200).'" />
  ';

?>
1 голос
/ 20 августа 2011

Это в принципе невозможно.Веб-браузер запрашивает страницу HTML и ожидает HTML.Или он запрашивает изображение и ожидает изображение.Вы не можете смешивать оба в одном запросе, просто потому, что допустим только один Content-Type.

Однако вы можете встроить изображение в HTML, используя URI данных :

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4/8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot">

Имейте в виду, что кодировка base64 довольно неэффективна, поэтому убедитесь, что вы точно сжали свой вывод, если браузер его поддерживает, например, используя gzip .

Так что для вас это вероятновыглядит следующим образом:

echo '<img src="data:image/jpeg;base64,' . base64_encode(displayImg_w('http://www.sanctius.net/wp-content/uploads/2010/05/Avatar-20.jpg',200)) . '">';

И убедитесь, что displayimg_w() больше не выводит заголовок.

Кроме того, displayimg_w() необходимо настроить в конце, чтобы вернуть данные изображениякак строка, а не прямой вывод:

ob_start();
imagejpeg($dst_im);
return ob_get_flush();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...