Php вывести картинку из файла

Обновлено: 04.07.2024

Библиотека GD позволяет как выводить изображения непосредственно в окне браузера, так и сохранять их на жестком диске. В обоих случаях используются следующие функции ( в зависимости от формата изображения ).
int ImageJpeg ( resource image [ , string filename [ , int quality] ] ) ;
int ImagePNG (( resource image [ , string filename] ) ;
int ImageWbmp ( resource image [ , string filename [ , int foreground] ] ) ;
Ниже каждая из этих функций будет рассмотрена более подробно.

Функция ImageJpeg ( )

Функция ImageJpeg ( ) имеет следующий синтаксис.
ImageJpeg ( $im [ , $filename [ , $quality] ] ) ;
Эта функция позволяет сохранить на диске или вывести в окне браузера изображение с идентификатором $im в формате JPEG. Аргументы $filename и $quality являются необязательными и задают путь, по которому будет сохранено изображение, и его качество соответственно.
Параметр $quality может принимать значения от 0 ( наихудшее качество ) до 100 ( наилучшее качество ). По умолчанию используется значение 75.
Если параметр $filename указан явно, то изображение будет сохранено в заданном месте. В противном случае изображение будет выведено непосредственно в окне браузера. Однако для того, чтобы браузер интерпретировал содержимое страницы как изображение в формате JPEG, необходимо добавить соответствующий заголовок с помощью функции Header ( ) , как показано ниже.
Header ( “ Content-type: image/jpeg “ ) ;
Вот пример вывода изображения в формате JPEG в окне браузера.
<?php
$1en = 100 ; $wid = 100 ;
$im = ImageCreate ( $1en , $wid ) ;
$bg = ImageColorAllocate ( $im , 0 , 255 , 0 ) ;

Header ( “ Content-type: image/jpeg “ ) ; / / Формирование заголовка
ImageJpege ( $im ) ; / / Вывод изображения в браузер
ImageDestroy ( $im ) ;
?>

Функция ImagePNG ( )

Функция ImagePNG ( ) аналогична предыдущей, однако сохраняет на диск или выводит в браузер изображение в формате PNG и не содержит параметра качества. Она имеет следующий синтаксис.
ImagePNG ( $im [ , $filename ] ) ;
Если требуется вывести изображение непосредственно в окне браузера, нужно добавить следующий заголовок.
Header ( “ Content-type: image/png “ ) ;

Функция ImageWbmp ( )

Функция Функция ImageWbmp ( ) позволяет сохранить на диске или вывести в окне браузера изображение с идентификатором $im в формате WBMP, который используется для беспроводных устройств. Эта функция имеет следующий синтаксис.
ImageWbmp ( $im [ , $filename [ , $foreground] ] ) ;
Как и в предыдущих примерах, параметр $filename задает путь, по которому изображение будет сохранено. Параметр $foreground является идентификатором установленного цвета в палитре и определяет цвет изображения (foreground color ). По умолчанию применяется черный цвет.
Для вывода в окне браузера изображений в формате WBMP необходимо использовать следующий заголовок.
Header ( “ Content-type: image/vnd . wap . wbmp “ ) ;
Формат изображений WBMP поддерживается только в версии gd – 1.8 и последующих.

Representation decimal of a color in hexadecimal for use on functions of library GD.

function getRgbFromGd ( $color_hex )

return array_map ( 'hexdec' , explode ( '|' , wordwrap ( substr ( $color_hex , 1 ), 2 , '|' , 1 )));

print_r ( getRgbFromGd ( $var ));

// Output: Array ( [0] => 255 [1] => 255 [2] => 255 )

I wrote a simple function to convert an image resource to PGM (portable graymap) in order to feed it to an OCR program. It works just like the rest of the image output functions, and will convert to grayscale for you:

<?php
function imagepgm ( $image , $filename = null )
$pgm = "P5 " . imagesx ( $image ). " " . imagesy ( $image ). " 255\n" ;
for( $y = 0 ; $y < imagesy ( $image ); $y ++)
for( $x = 0 ; $x < imagesx ( $image ); $x ++)
$colors = imagecolorsforindex ( $image , imagecolorat ( $image , $x , $y ));
$pgm .= chr ( 0.3 * $colors [ "red" ] + 0.59 * $colors [ "green" ] + 0.11 * $colors [ "blue" ]);
>
>
if( $filename != null )
$fp = fopen ( $filename , "w" );
fwrite ( $fp , $pgm );
fclose ( $fp );
>
else
return $pgm ;
>
>
?>

If you happen to need a way to output a Windows BMP file (e.g. when using the PEAR ExcelWriter), feel free to use the following code:

<?php
function imagebmp ( $im , $fn = false )
if (! $im ) return false ;

if ( $fn === false ) $fn = 'php://output' ;
$f = fopen ( $fn , "w" );
if (! $f ) return false ;

//Image dimensions
$biWidth = imagesx ( $im );
$biHeight = imagesy ( $im );
$biBPLine = $biWidth * 3 ;
$biStride = ( $biBPLine + 3 ) &

3 ;
$biSizeImage = $biStride * $biHeight ;
$bfOffBits = 54 ;
$bfSize = $bfOffBits + $biSizeImage ;

//BITMAPFILEHEADER
fwrite ( $f , 'BM' , 2 );
fwrite ( $f , pack ( 'VvvV' , $bfSize , 0 , 0 , $bfOffBits ));

//BITMAPINFO (BITMAPINFOHEADER)
fwrite ( $f , pack ( 'VVVvvVVVVVV' , 40 , $biWidth , $biHeight , 1 , 24 , 0 , $biSizeImage , 0 , 0 , 0 , 0 ));

$numpad = $biStride - $biBPLine ;
for ( $y = $biHeight - 1 ; $y >= 0 ; -- $y )
for ( $x = 0 ; $x < $biWidth ; ++ $x )
$col = imagecolorat ( $im , $x , $y );
fwrite ( $f , pack ( 'V' , $col ), 3 );
>
for ( $i = 0 ; $i < $numpad ; ++ $i )
fwrite ( $f , pack ( 'C' , 0 ));
>
fclose ( $f );
return true ;
>
?>

It works the same way as regular imagejpeg/imagepng do and only supports GD2.0 true colour bitmaps (which is what's required by ExcelWriter).

This is an example of get high resolution images.

<?php
/**
* Class name : resizeImage
* Created by : wang
* Description : This class is to resize the image from original size to new size
*/
class resizeImage
/**
* Function name : resize_img
* Description : This function is to resize image
* @param : $origimg variable is the original image
* @param : $newimg variable is the new image
* @param : $w variable is the width of image
* @param : $f variable is the height of image
*/
public function resize_img ( $origimg , $newimg , $w , $h ) $info = getimagesize ( $origimg );
$mime = $info [ 'mime' ];

// Check they extention of image
$extension = image_type_to_extension ( $info [ 2 ]);
if( strtolower ( $extension ) == '.jpg' ) $img = $this -> resize_imagepng ( $origimg , $w , $h );
imagepng ( $img , $newimg );
imagedestroy ( $img );
>elseif( strtolower ( $extension ) == '.jpg' ) $img = $this -> resize_imagejpeg ( $origimg , $w , $h );
imagejpeg ( $img , $newimg );
imagedestroy ( $img );
>elseif( strtolower ( $extension == '.jpg' )) $img = $this -> resize_imagegif ( $origimg , $w , $h );
imagegif ( $img , $newimg );
imagedestroy ( $img );
>

>
/**
* End function name : resize_img
*/

/**
* Function name : resize_imagepng
* Description : This function is to resize png image
* @param : $file variable is the original image
* @param : $w variable is the width of image
* @param : $f variable is the height of image
*/
private function resize_imagepng ( $file , $w , $h ) list( $width , $height ) = getimagesize ( $file );
$src = imagecreatefrompng ( $file );
$dst = imagecreatetruecolor ( $w , $h );
imagecopyresampled ( $dst , $src , 0 , 0 , 0 , 0 , $w , $h , $width , $height );
return $dst ;
>
/**
* End function name : resize_imagepng
*/

/**
* Function name : resize_imagejpeg
* Description : This function is to resize jpeg image
* @param : $file variable is the original image
* @param : $w variable is the width of image
* @param : $f variable is the height of image
*/
private function resize_imagejpeg ( $file , $w , $h ) list( $width , $height ) = getimagesize ( $file );
$src = imagecreatefromjpeg ( $file );
$dst = imagecreatetruecolor ( $w , $h );
imagecopyresampled ( $dst , $src , 0 , 0 , 0 , 0 , $w , $h , $width , $height );
return $dst ;
>
/**
* End function name : resize_imagejpeg
*/

/**
* Function name : resize_imagegif
* Description : This function is to resize gif image
* @param : $file variable is the original image
* @param : $w variable is the width of image
* @param : $f variable is the height of image
*/
private function resize_imagegif ( $file , $w , $h ) list( $width , $height ) = getimagesize ( $file );
$src = imagecreatefromgif ( $file );
$dst = imagecreatetruecolor ( $w , $h );
imagecopyresampled ( $dst , $src , 0 , 0 , 0 , 0 , $w , $h , $width , $height );
return $dst ;
>
/**
* End function name : resize_imagegif
*/
>
/**
* End class name : resizeImage
*/
?>

I know this might look somewhat superfluous to others, but i once came across a situation where i needed a *strong* blur on an image without having ImageMagick installed. Executing the convolution-filter several times on the same image is awfully slow and still doesn't give a good blur.

function blurImage ( $srcimg , $blur )
$blur = $blur * $blur ;
$blur = max ( 0 , min ( 1 , $blur ));

$srcw = imagesx ( $srcimg );
$srch = imagesy ( $srcimg );

$dstimg = imagecreatetruecolor ( $srcw , $srch );

$f1a = $blur ;
$f1b = 1.0 - $blur ;


$cr = 0 ; $cg = 0 ; $cb = 0 ;
$nr = 0 ; $ng = 0 ; $nb = 0 ;

$rgb = imagecolorat ( $srcimg , 0 , 0 );
$or = ( $rgb >> 16 ) & 0xFF ;
$og = ( $rgb >> 8 ) & 0xFF ;
$ob = ( $rgb ) & 0xFF ;

$nr = ( $cr * $f1a ) + ( $or * $f1b );
$ng = ( $cg * $f1a ) + ( $og * $f1b );
$nb = ( $cb * $f1a ) + ( $ob * $f1b );

$or = $nr ;
$og = $ng ;
$ob = $nb ;

$rgb = imagecolorat ( $srcimg , 0 , $y );
$or = ( $rgb >> 16 ) & 0xFF ;
$og = ( $rgb >> 8 ) & 0xFF ;
$ob = ( $rgb ) & 0xFF ;

$x = $srcw ;
while ( $x --)
//horizontal
$rgb = imagecolorat ( $srcimg , $x , $y );
$cr = ( $rgb >> 16 ) & 0xFF ;
$cg = ( $rgb >> 8 ) & 0xFF ;
$cb = ( $rgb ) & 0xFF ;

$nr = ( $cr * $f1a ) + ( $or * $f1b );
$ng = ( $cg * $f1a ) + ( $og * $f1b );
$nb = ( $cb * $f1a ) + ( $ob * $f1b );

$or = $nr ;
$og = $ng ;
$ob = $nb ;


//vertical
$rgb = imagecolorat ( $dstimg , $x , $y + 1 );
$vr = ( $rgb >> 16 ) & 0xFF ;
$vg = ( $rgb >> 8 ) & 0xFF ;
$vb = ( $rgb ) & 0xFF ;

$nr = ( $nr * $f1a ) + ( $vr * $f1b );
$ng = ( $ng * $f1a ) + ( $vg * $f1b );
$nb = ( $nb * $f1a ) + ( $vb * $f1b );

$vr = $nr ;
$vg = $ng ;
$vb = $nb ;

imagesetpixel ( $dstimg , $x , $y ,( $nr << 16 ) | ( $ng << 8 ) | ( $nb ));
>


$srcimg = imagecreatefromjpeg ( "test.jpg" );
$dstimg = blurImage ( $srcimg , 0.2 );

header ( 'Content-type: image/jpeg' );
echo( imagejpeg ( $dstimg ) );
exit();

This is an example of black-and-white imagebmp() implementation.

/**
* Output a black-and-white BMP image to either the browser or a file.
*
* @param resource $image
* An image resource, returned by one of the image creation functions,
* such as imagecreatetruecolor().
*
* @param string|null $to
* The path or an open stream resource
* (which is automatically being closed after this function returns)
* to save the file to.
* If not set or NULL, the raw image stream will be outputted directly.
*
* @param float $threshold
* The number in the range of 0.0 to 1.0.
* Brighter for larger, or darker for smaller.
*
* @return bool Returns TRUE on success or FALSE on failure.
*
*/
function imagebwbmp ( $image , $to = null , $threshold = 0.5 )
if ( func_num_args () < 1 ) $fmt = "imagebwbmp() expects a least 1 parameters, %d given" ;
trigger_error ( sprintf ( $fmt , func_num_args ()), E_USER_WARNING );
return;
>
if (! is_resource ( $image )) $fmt = "imagebwbmp() expects parameter 1 to be resource, %s given" ;
trigger_error ( sprintf ( $fmt , gettype ( $image )), E_USER_WARNING );
return;
>
if (! is_numeric ( $threshold )) $fmt = "imagebwbmp() expects parameter 3 to be float, %s given" ;
trigger_error ( sprintf ( $fmt , gettype ( $threshold )), E_USER_WARNING );
return;
>

if ( get_resource_type ( $image ) !== 'gd' ) $msg = "imagebwbmp(): supplied resource is not a valid gd resource" ;
trigger_error ( $msg , E_USER_WARNING );
return false ;
>
switch ( true ) case $to === null :
break;
case is_resource ( $to ) && get_resource_type ( $to ) === 'stream' :
case is_string ( $to ) && $to = fopen ( $to , 'wb' ):
if ( preg_match ( '/[waxc+]/' , stream_get_meta_data ( $to )[ 'mode' ])) break;
>
default:
$msg = "imagebwbmp(): Invalid 2nd parameter, it must a writable filename or a writable stream" ;
trigger_error ( $msg , E_USER_WARNING );
return false ;
>

if ( $to === null ) $to = fopen ( 'php://output' , 'wb' );
>

$biWidth = imagesx ( $image );
$biHeight = imagesy ( $image );
$biSizeImage = ((int) ceil ( $biWidth / 32 ) * 32 / 8 * $biHeight );
$bfOffBits = 54 + 4 * 2 ; // Use two colors (black and white)
$bfSize = $bfOffBits + $biSizeImage ;

fwrite ( $to , 'BM' );
fwrite ( $to , pack ( 'VvvV' , $bfSize , 0 , 0 , $bfOffBits ));
fwrite ( $to , pack ( 'VVVvvVVVVVV' , 40 , $biWidth , $biHeight , 1 , 1 , 0 , $biSizeImage , 0 , 0 , 0 , 0 ));
fwrite ( $to , "\xff\xff\xff\x00" ); // white
fwrite ( $to , "\x00\x00\x00\x00" ); // black

for ( $y = $biHeight - 1 ; $y >= 0 ; -- $y ) $byte = 0 ;
for ( $x = 0 ; $x < $biWidth ; ++ $x ) $rgb = imagecolorsforindex ( $image , imagecolorat ( $image , $x , $y ));
$value = ( 0.299 * $rgb [ 'red' ] + 0.587 * $rgb [ 'green' ] + 0.114 * $rgb [ 'blue' ]) / 0xff ;
$color = (int)( $value > $threshold );
$byte = ( $byte << 1 ) | $color ;
if ( $x % 8 === 7 ) fwrite ( $to , pack ( 'C' , $byte ));
$byte = 0 ;
>
>
if ( $x % 8 ) fwrite ( $to , pack ( 'C' , $byte << ( 8 - $x % 8 )));
>
if ( $x % 32 ) fwrite ( $to , str_repeat ( "\x00" , (int)(( 32 - $x % 32 ) / 8 )));
>
>


Хорошо, это все понятно, а как будет выглядеть если картинка большая, мы вставляем переменную и картинка раздвигает рамки таблицы, как сделать что бы картинка вписывалась в таблицу, если есть ответ выслите на аську 400008703 или ответьте. Заранее благодарен, сам парюсь не знаю как.

У большинства тегов в HTML, есть свойство width, т.е. ширина. Из этого следует, что прежде чем вставлять картинку в таблицу можно просчитать и выставить ширину картинки и она уменьшится. Есть так же свойство height - это высота. Для того чтоб сохранялись пропорции картинки изменяйте только одну величину, ширину или высоту. Примерно так: < img src="картинка.jpg" width ="250" > или < img src="картинка.jpg" height ="350" > Хотя конечно можно и так: < img src="картинка.jpg" width="250" height="350" >

Вот пример я вытаскиваю картинку из БД, то есть у меня там лежит , то есть я указываю переменную %s, а картинки естественно разного размера мне нужно что бы эти картинки вставали в рамку таблицы все перепробовал ну ни как. максимум что сделал я ее вписал в таблицу через overflow-hidden и display-block, она встала в таблицу но картинки видно только начало края картинки, вот как сделать что бы они вставали под размер таблицы. (Картинки все разного размера). Помогите. Лучше на примере маленьком. Заранее благодарен.

Да я с вами согласен если из базы данных брать только путь /images/ip.jpg то естественно можно подставить и ширину и высоту, но у меня из базы тянет сразу (img src='путь') естественно в переменную которую я вытаскиваю я не могу подставить размеры как вы выше описали, вот и спрашивается есть еще какие варианты. Заранее благодарен!

Спасибо огромнейшее. Сайт супер отвечают, на все вопросы. Советую всем кто в чем то затрудняется. Спасибо еще раз.

а вы не могли бы подсказать, не по этой теме? ели откажитесь я пойму?

На форуме есть раздел "Заказ уроков", это бесплатно. Пишите там, что вас интересует и попробуем разобраться. Предварительно прочитайте правила форума.

А подскажите как выводить картинки и контент вместе на одной странице.

SETTER Спасибо за ответ. Дело в том что к примеру смайлы можно ставить Пример: // заменяем текстовые смайлики на графические $dt[0]=str_replace(":-))",$s1,$dt[0]); $dt[0]=str_replace(":-)",$s2,$dt[0]); А вот как описать что бы скрипт преобразовывал и отображал картинки не понятно :/ Если сможете подскажите как сделать :)

SETTER Спасибо за попытку помочь! :) но я нашел в сети другую гостевую с возможностью вставки изображений : )

Это все очень интересно и понятно, но а если у тебя допустим без базы данных Mysql. А вся информация хранится в формате редактора прямо у тебя на сервере.

У меня не открывает картинку. Пишет просто изображение, что делать?(

а как например напротив картинки ровно напротив (цент) поставить код php ?

Здравствуйте. у меня такой вопрос..подскажите как на самой картинке,сделать ссылки куда либо (пример: картинка,а на ней написано кабинет,нажимаешь и уходит в форму кабинет)

Вариант зайти на letpix ru - загрузить картинку или картинки и вставить уже готовый, появившийся HTML код на свою страницу. Всё генерируется автоматически.

а где варианты что картинка в самом коде) в base64 или в базе аналогично

У меня не отображаются картинки ни на моем сайте через все браузеры, ни в вашей статье. В этой статье ваши картинки у меня тоже не отображаются. Проблема очевидно не в коде. Но тогда в чем? Кто знает, подскажите.

Вот мне бы полностью html и php код вот у меня есть форма загрузки картинок на сервер там они загружаются в отдельную папку как бы извлечь из этой папки что бы картинка была на страничке моего сайта

Суть заключается в том, чтоб иметь линк (ссылку) на эту картинку. Ну например в таблице базы данных у вас сохраняется, при загрузки, путь до картинки. Которая находится теперь на сервере, в определённой директории. Тогда выбрав из базы эту строку (путь до картинки), вы в вёрстку вашей страницы, вставляете такой тег . Вот и весь принцип вставки.

Спасибо огромное , очень помогли ! Все понятно и примерами .

Доброго времени суток! Большая просьба подсказать способ вывода картинки по меткам WP. Например, в посте выводится метка в виде текста: трам-пампам, а нужно, чтобы в придачу к этому тексту выводилась и её фото. Благодарю заранее.

В PHP можно не только создать изображение с нуля, но и загрузить существующее. Это делается с помощью функций, каждая из которых загружает изображение своего формата. Функция imageCreateFromJpeg() использует файл в формате jpeg. Возвращает дескриптор изображения. Загрузим файл picture.jpg из папки phpimages. Вы можете использовать эту картинку:

Картинка

Напишем скрипт, который загружает изображение из файла и выводит в браузер:

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

  • imageCreateFromPng()
  • imageCreateFromWbmp()
  • imageCreateFromGif()
  • imageCreateFromGg2()

Существуют функции и для других форматов. Набор поддерживаемых форматов зависит от сборки PHP. Во всех функциях вместо адреса файла можно указать URL. Для этого в файле php.ini должна быть включена опция allow_url_fopen, позволяющая загружать файлы из интернета.

Иногда нужна не вся картина, а только её часть. Тогда нужно сделать так:

  • загрузить картинку
  • затем создать новое изображение
  • скопировать нужную часть картинки в новое изображение и дальше работать с ним

Для копирования используется функция imageCopy() . Она возвращает true в случае успеха.

imageCopy (принимающее изображение, оригинал, X принимающего, Y принимающего, X оригинала, Y оригинала, ширина, высота)

принимающее изображение - дескриптор изображения, в которое вставляется копия

оригинал - дескриптор изображения, которое копируется

x принимающего - координата X в принимающем изображении

y принимающего - координата Y в принимающем изображении

x оригинала - координата X в оригинале

y оригинала - координата Y в оригинале

ширина - ширина копируемой части

высота - высота копируемой части

В параметрах указываются координаты левого верхнего угла копируемой части. Выведем на экран часть картинки из файла:

Копирование

Функция imageCopyResized() копирует часть картинки и изменяет её размеры.

imageCopyResize (принимающее изображение, оригинал, X принимающего, Y принимающего, X ориринала, Y оригинала, новая ширина, новая высота, оригинальная ширина, оригинальная высота)

Функция imageCopyResampled() также копирует с изменением размеров. Она отличается тем, что производит копирование с ресемплированием. Оно лучше сохраняет качество изображения при уменьшении. Изменим размеры картинки, которая скопирована в предыдущем примере. Для этого заменим функцию imageCopy() на imageCopyResized() . Не будем стремиться сохранить пропорции.

Новые размеры копируемой части 480 на 235. Картинка выглядит так:

Размеры картинки

Попробуйте использовать обе функции. Сделайте разные варианты изменения размеров.

Читайте также: