Меню

Вывести изображение через php

imagejpeg — Выводит изображение в браузер или пишет в файл

(PHP 4, PHP 5, PHP 7)

imagejpeg — Выводит изображение в браузер или пишет в файл

Описание

Функция imagejpeg() создаёт файл JPEG из изображения image .

Список параметров

Ресурс изображения, полученный одной из функций создания изображений, например, такой как imagecreatetruecolor() .

Путь для сохранения файла. Если не установлен или равен NULL , изображение будет выведено в поток вывода в бинарном виде.

Если вы хотите пропустить этот параметр и использовать quality , то укажите NULL .

Необязательный параметр, и может принимать значения в диапазоне от 0 (низкое качество, маленький размер файла) до 100 (высокое качество, большой размер файла). По умолчанию используется качество IJG (около 75).

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Примеры

Пример #1 Вывод JPEG-изображения

// Создаём пустое изображение и добавляем текст
$im = imagecreatetruecolor ( 120 , 20 );
$text_color = imagecolorallocate ( $im , 233 , 14 , 91 );
imagestring ( $im , 1 , 5 , 5 , ‘A Simple Text String’ , $text_color );

// Устанавливаем тип содержимого в заголовок, в данном случае image/jpeg
header ( ‘Content-Type: image/jpeg’ );

// Выводим изображение
imagejpeg ( $im );

// Освобождаем память
imagedestroy ( $im );
?>

Результатом выполнения данного примера будет что-то подобное:

Пример #2 Сохранение изображения JPEG

// Создаём пустое изображение и добавляем текст
$im = imagecreatetruecolor ( 120 , 20 );
$text_color = imagecolorallocate ( $im , 233 , 14 , 91 );
imagestring ( $im , 1 , 5 , 5 , ‘A Simple Text String’ , $text_color );

// Сохраняем изображение в ‘simpletext.jpg’
imagejpeg ( $im , ‘simpletext.jpg’ );

// Освобождаем память
imagedestroy ( $im );
?>

Пример #3 Вывод JPEG-изображения с 75% качеством

// Создаём пустое изображение и добавляем текст
$im = imagecreatetruecolor ( 120 , 20 );
$text_color = imagecolorallocate ( $im , 233 , 14 , 91 );
imagestring ( $im , 1 , 5 , 5 , ‘A Simple Text String’ , $text_color );

// Устанавливаем тип содержимого в заголовок, в данном случае image/jpeg
header ( ‘Content-Type: image/jpeg’ );

// Пропускаем параметр filename, используя NULL, а затем устанавливаем качество в 75%
imagejpeg ( $im , NULL , 75 );

// Освобождаем память
imagedestroy ( $im );
?>

Примечания

Замечание: Поддержка JPEG доступна только в случае, если PHP был скомпилирован с GD-1.8 или более поздней версии.

Если требуется вывести Progressive JPEG (прогрессивное представление данных), то необходимо использовать функцию imageinterlace() для активации соответствующего режима.

Смотрите также

  • imagepng() — Вывод PNG изображения в броузер или файл
  • imagegif() — Выводит изображение в браузер или пишет в файл
  • imagewbmp() — Выводит изображение в браузер или пишет в файл
  • imageinterlace() — Включение или выключение интерлейсинга
  • imagetypes() — Возвращает список типов изображений, поддерживаемых PHP сборкой

Источник

Функции GD и функции для работы с изображениями

Содержание

  • gd_info — Вывод информации о текущей установленной GD библиотеке
  • getimagesize — Получение размера изображения
  • getimagesizefromstring — Получение размера изображения из строки данных
  • image_type_to_extension — Получение расширения файла для типа изображения
  • image_type_to_mime_type — Получение Mime-типа для типа изображения, возвращаемого функциями getimagesize, exif_read_data, exif_thumbnail, exif_imagetype
  • image2wbmp — Выводит изображение в браузер или пишет в файл
  • imageaffine — Вернуть изображение, содержащее аффинно-преобразованное изображение src, используя дополнительную область ограничения
  • imageaffinematrixconcat — Конкатенирует две аффинные матрицы преобразования
  • imageaffinematrixget — Получает матрицу аффинного преобразования
  • imagealphablending — Задание режима сопряжения цветов для изображения
  • imageantialias — Требуется ли применять функции сглаживания или нет
  • imagearc — Рисование дуги
  • imageavif — Выводит изображение в браузер или пишет в файл
  • imagebmp — Вывести BMP-изображение в браузер или файл
  • imagechar — Рисование символа по горизонтали
  • imagecharup — Рисование символа вертикально
  • imagecolorallocate — Создание цвета для изображения
  • imagecolorallocatealpha — Создание цвета для изображения
  • imagecolorat — Получение индекса цвета пиксела
  • imagecolorclosest — Получение индекса цвета ближайшего к заданному
  • imagecolorclosestalpha — Получение индекса цвета ближайшего к заданному с учётом прозрачности
  • imagecolorclosesthwb — Получение индекса цвета, имеющего заданный тон, белизну и затемнение
  • imagecolordeallocate — Разрыв ассоциации переменной с цветом для заданного изображения
  • imagecolorexact — Получение индекса заданного цвета
  • imagecolorexactalpha — Получение индекса заданного цвета и альфа компонента
  • imagecolormatch — Делает цвета палитровой версии изображения более соответствующими truecolor версии
  • imagecolorresolve — Получает идентификатор конкретного цвета или его ближайший аналог
  • imagecolorresolvealpha — Получает идентификатор конкретного цвета и альфа компонента или его ближайший аналог
  • imagecolorset — Установка набора цветов для заданного индекса палитры
  • imagecolorsforindex — Получение цветов, соответствующих индексу
  • imagecolorstotal — Определение количества цветов в палитре изображения
  • imagecolortransparent — Определяет цвет как прозрачный
  • imageconvolution — Наложение искривляющей матрицы 3х3, используя коэффициент и смещение
  • imagecopy — Копирование части изображения
  • imagecopymerge — Копирует часть изображения с наложением
  • imagecopymergegray — Копирует часть изображения с наложением в градациях серого
  • imagecopyresampled — Копирование и изменение размера изображения с ресемплированием
  • imagecopyresized — Копирование и изменение размера части изображения
  • imagecreate — Создание нового палитрового изображения
  • imagecreatefromavif — Создаёт новое изображение из файла или URL
  • imagecreatefrombmp — Создаёт новое изображение из файла или URL
  • imagecreatefromgd2 — Создание нового изображения на основе GD2 или URL
  • imagecreatefromgd2part — Создание нового изображения на основе части GD2 файла или URL
  • imagecreatefromgd — Создание нового изображения на основе GD файла или URL
  • imagecreatefromgif — Создаёт новое изображение из файла или URL
  • imagecreatefromjpeg — Создаёт новое изображение из файла или URL
  • imagecreatefrompng — Создаёт новое изображение из файла или URL
  • imagecreatefromstring — Создание нового изображения из потока представленного строкой
  • imagecreatefromtga — Создаёт новое изображение из файла или URL
  • imagecreatefromwbmp — Создаёт новое изображение из файла или URL
  • imagecreatefromwebp — Создаёт новое изображение из файла или URL
  • imagecreatefromxbm — Создаёт новое изображение из файла или URL
  • imagecreatefromxpm — Создаёт новое изображение из файла или URL
  • imagecreatetruecolor — Создание нового полноцветного изображения
  • imagecrop — Обрезать изображение до заданного прямоугольника
  • imagecropauto — Обрезает изображение автоматически, используя один из доступных режимов
  • imagedashedline — Рисование пунктирной линии
  • imagedestroy — Уничтожение изображения
  • imageellipse — Рисование эллипса
  • imagefill — Заливка
  • imagefilledarc — Рисование и заливка дуги
  • imagefilledellipse — Рисование закрашенного эллипса
  • imagefilledpolygon — Рисование закрашенного многоугольника
  • imagefilledrectangle — Рисование закрашенного прямоугольника
  • imagefilltoborder — Заливка цветом
  • imagefilter — Применяет фильтр к изображению
  • imageflip — Переворачивает изображение, используя выбранный режим
  • imagefontheight — Получение высоты шрифта
  • imagefontwidth — Получение ширины шрифта
  • imageftbbox — Определение границ текста выводимого шрифтом freetype2
  • imagefttext — Нанесение текста на изображение, используя шрифты FreeType 2
  • imagegammacorrect — Применение гамма коррекции к GD изображению
  • imagegd2 — Вывод GD2 изображения в браузер или файл
  • imagegd — Вывод GD-изображения в браузер или в файл
  • imagegetclip — Получить отсекающий прямоугольник
  • imagegetinterpolation — Получает метод интерполяции
  • imagegif — Выводит изображение в браузер или пишет в файл
  • imagegrabscreen — Захватывает изображение с экрана
  • imagegrabwindow — Захватывает изображение окна
  • imageinterlace — Включение или выключение интерлейсинга
  • imageistruecolor — Определяет, является ли изображение полноцветным
  • imagejpeg — Выводит изображение в браузер или пишет в файл
  • imagelayereffect — Установка флага альфа сопряжения для использования эффектов наложения изображений
  • imageline — Рисование линии
  • imageloadfont — Загрузка шрифта
  • imageopenpolygon — Рисует открытый полигон
  • imagepalettecopy — Копирование палитры из одного изображения в другое
  • imagepalettetotruecolor — Преобразует изображение на основе палитры в настоящий цвет
  • imagepng — Вывод PNG изображения в браузер или файл
  • imagepolygon — Рисование многоугольника
  • imagerectangle — Рисование прямоугольника
  • imageresolution — Получить или установить разрешение изображения
  • imagerotate — Поворот изображения с заданным углом
  • imagesavealpha — Сохранять ли полную информацию альфа-канала при сохранении изображений PNG
  • imagescale — Масштабировать изображение по заданной ширине и высоте
  • imagesetbrush — Установка изображения (кисти), посредством которого будут рисоваться линии
  • imagesetclip — Установите прямоугольник ограничения
  • imagesetinterpolation — Устанавливает метод интерполяции
  • imagesetpixel — Рисование точки
  • imagesetstyle — Установка стиля рисования линий
  • imagesetthickness — Установка толщины линий
  • imagesettile — Установка изображения, которое будет использовано в качестве элемента мозаичной заливки
  • imagestring — Рисование строки текста горизонтально
  • imagestringup — Рисование строки текста вертикально
  • imagesx — Получение ширины изображения
  • imagesy — Получение высоты изображения
  • imagetruecolortopalette — Преобразование полноцветного изображения в палитровое
  • imagettfbbox — Получение параметров рамки обрамляющей текст написанный TrueType шрифтом
  • imagettftext — Рисование текста на изображении шрифтом TrueType
  • imagetypes — Возвращает список типов изображений, поддерживаемых PHP сборкой
  • imagewbmp — Выводит изображение в браузер или пишет в файл
  • imagewebp — Вывод изображения WebP в браузер или файл
  • imagexbm — Вывод XBM изображения в браузер или файл
  • iptcembed — Встраивание двоичных IPTC данных в JPEG изображение
  • iptcparse — Разбор двоичных IPTC данных на отдельные теги
  • jpeg2wbmp — Конвертирует изображение из формата JPEG в WBMP
  • png2wbmp — Преобразование PNG файла в WBMP
Читайте также:  Как стирать вещи с надписями

User Contributed Notes 9 notes

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

// Representation hexadecimal
$var = ‘#FFFFFF’ ;

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:

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:

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.

/**
* 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’ ];

// Make sure that the requested file is actually an image
if( substr ( $mime , 0 , 6 ) != ‘image/’ )
<
header ( ‘HTTP/1.1 400 Bad Request’ );
return ‘Error: requested file is not an accepted type: ‘ . $origimg ;
exit();
>

// Check they extention of image
$extension = image_type_to_extension ( $info [ 2 ]);
if( strtolower ( $extension ) == ‘.png’ ) <
$img = $this -> resize_imagepng ( $origimg , $w , $h );
imagepng ( $img , $newimg );
imagedestroy ( $img );
>elseif( strtolower ( $extension ) == ‘.jpeg’ ) <
$img = $this -> resize_imagejpeg ( $origimg , $w , $h );
imagejpeg ( $img , $newimg );
imagedestroy ( $img );
>elseif( strtolower ( $extension == ‘.gif’ )) <
$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.

The function below accepts a truecolor-image and a blur-factor between 0.0 and 1.0. Beware: It’s still quite slow.

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 )));
>
>

Источник