Как добавить картинку в php
Перейти к содержимому

Как добавить картинку в php

  • автор:

Как добавить картинку в php

Пример #1 Создание PNG средствами PHP

header ( «Content-type: image/png» );
$string = $_GET [ ‘text’ ];
$im = imagecreatefrompng ( «images/button1.png» );
$orange = imagecolorallocate ( $im , 220 , 210 , 60 );
$px = ( imagesx ( $im ) — 7.5 * strlen ( $string )) / 2 ;
imagestring ( $im , 3 , $px , 9 , $string , $orange );
imagepng ( $im );
imagedestroy ( $im );

Этот пример можно было бы вызвать на странице с тегом: . Приведённый выше скрипт button.php возьмёт строку «text» и наложит её поверх базового изображения, которое является, в данном случае «images/button1.png» и выведет конечное изображение. Это очень удобный способ, чтобы избежать необходимости создания новой кнопки всякий раз, когда вы хотите изменить текст кнопки. С помощью этого метода она генерируются динамически.

User Contributed Notes 1 note

6 years ago
Function to create random png images when requested for example.

here is create_image.php
$setting = isset( $_GET [ ‘s’ ]) ? $_GET [ ‘s’ ] : «FFF_111_100_100» ;
$setting = explode ( «_» , $setting );
$img = array();

switch ( $n = count ( $setting )) case $n > 4 :
case 3 :
$setting [ 3 ] = $setting [ 2 ];
case 4 :
$img [ ‘width’ ] = (int) $setting [ 2 ];
$img [ ‘height’ ] = (int) $setting [ 3 ];
case 2 :
$img [ ‘color’ ] = $setting [ 1 ];
$img [ ‘background’ ] = $setting [ 0 ];
break;
default:
list( $img [ ‘background’ ], $img [ ‘color’ ], $img [ ‘width’ ], $img [ ‘height’ ]) = array( ‘F’ , ‘0’ , 100 , 100 );
break;
>

$background = explode ( «,» , hex2rgb ( $img [ ‘background’ ]));
$color = explode ( «,» , hex2rgb ( $img [ ‘color’ ]));
$width = empty( $img [ ‘width’ ]) ? 100 : $img [ ‘width’ ];
$height = empty( $img [ ‘height’ ]) ? 100 : $img [ ‘height’ ];
$string = (string) isset( $_GET [ ‘t’ ]) ? $_GET [ ‘t’ ] : $width . «x» . $height ;

header ( «Content-Type: image/png» );
$image = @ imagecreate ( $width , $height )
or die( «Cannot Initialize new GD image stream» );

$background_color = imagecolorallocate ( $image , $background [ 0 ], $background [ 1 ], $background [ 2 ]);
$text_color = imagecolorallocate ( $image , $color [ 0 ], $color [ 1 ], $color [ 2 ]);

imagestring ( $image , 5 , 5 , 5 , $string , $text_color );
imagepng ( $image );
imagedestroy ( $image );

function hex2rgb ( $hex ) // Copied
$hex = str_replace ( «#» , «» , $hex );

switch ( strlen ( $hex )) case 1 :
$hex = $hex . $hex ;
case 2 :
$r = hexdec ( $hex );
$g = hexdec ( $hex );
$b = hexdec ( $hex );
break;

case 3 :
$r = hexdec ( substr ( $hex , 0 , 1 ). substr ( $hex , 0 , 1 ));
$g = hexdec ( substr ( $hex , 1 , 1 ). substr ( $hex , 1 , 1 ));
$b = hexdec ( substr ( $hex , 2 , 1 ). substr ( $hex , 2 , 1 ));
break;

default:
$r = hexdec ( substr ( $hex , 0 , 2 ));
$g = hexdec ( substr ( $hex , 2 , 2 ));
$b = hexdec ( substr ( $hex , 4 , 2 ));
break;
>

$rgb = array( $r , $g , $b );
return implode ( «,» , $rgb );
>

  • Примеры
    • Создание PNG средствами PHP
    • Добавление водяных знаков на изображения с помощью альфа-​каналов
    • Использование imagecopymerge создать полупрозрачный водяной знак
    • Copyright © 2001-2023 The PHP Group
    • My PHP.net
    • Contact
    • Other PHP.net sites
    • Privacy policy

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

    The image sharpen function (by Alex R. Austin) provided below seems to be very resource hungry and I couldn’t make it work on two different servers — trying to sharpen a 413 x 413 image I ended up with «Fatal error: Allowed memory size of 8388608 bytes exhausted» or «Internal Server Error» or the script terminated without notice. Because I had no priviliges to change the default memory limit on these servers I started looking for other sharpen functions. I have come across a php Unsharp Mask function which works like a charm on both of the servers I dealt with. It can be found at http://vikjavev.no/hovudsida/umtestside.php.

    17 years ago

    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 )

    17 years ago

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

    14 years ago

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

    12 years ago

    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 ;

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

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

    6 years ago

    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
    */
    ?>

    Как добавить картинку к объекту¶

    Чтобы добавить картинки к некоему объекту (пусть он будет называться “mod”) без создания новых таблиц связей и хранения, необходимо:

    • Шаг ​1. В шаблоне вставить следующую строку:
    • Шаг ​2. В php коде, который отвечает за обновление объекта пишем:
    • Шаг ​3. В php коде, который отвечает за выборку информации об объекте, пишем:
    • Шаг ​4. В php коде, который отвечает за удаление объекта, пишем:
    • Изменения размера “на лету”

    Шаг ​1. В шаблоне вставить следующую строку:¶

    В этом случае в шаблоне появятся два плейсхолдера для детальной и обычной картинки.

    Параметры:

    • image_name — уникальное имя, идентифицирующее пару картинок для данного объекта.
    • image_object_type — тип объекта, в котором будут храниться картинки в данном случае в таблице cscart_common_images_links , cscart_common_images , cscart_detailed_images .
    • image_pair — массив, содержащий информацию об уже загруженной паре (как его получить — см. ниже).
    • image_object_id — идентификатор объекта, к которому будет присоединяться пара картинок.
    • image_type — тип пары: M — основная, A — дополнительная (в большинстве случаев — только основная).

    Шаг ​2. В php коде, который отвечает за обновление объекта пишем:¶

    php fn_attach_image_pairs('mod_main', 'common', 0, 'mod'); ?> 
    • ads_main == параметру image_name в шаблоне.
    • common == параметру image_object_type в шаблоне.
    • 0 — идентификатор объекта, к которому привязываются картинки — можно не задавать, если в шаблоне передан параметр image_object_id . Обязательно задавать, если данная функция используется при создании объекта, т.к. в шаблоне привязки картинок к нему еще нет.
    • mod — имя таблицы, содержащей данный объект (другими словами, это параметр object_table в таблице common_images_links ; если таблица со ссылками используется своя, то параметр задавать не нужно — например, для товаров).

    Шаг ​3. В php коде, который отвечает за выборку информации об объекте, пишем:¶

    php $mod['main_pair'] = fn_get_image_pairs($mod_id, 'common', 'M', 'mod'); ?> 
    • $mod_id — идентификатор объекта, для которого выбираем картинки.
    • common == параметру image_object_type в шаблоне.
    • M == параметру image_type в шаблоне.
    • mod — то же самое, что и последний параметр в fn_attach_image_pairs .

    Шаг ​4. В php коде, который отвечает за удаление объекта, пишем:¶

    php fn_delete_image_pairs($mod_id, 'common', 'mod'); ?> 
    • $mod_id — идентификатор объекта, для которого удаляем картинки.
    • common == параметру image_object_type в шаблоне.
    • mod — то же самое, что и последний параметр в fn_attach_image_pairs .

    Вот собственно и все — удаление картинок/пар происходит через скрипт image.php и никакого кода каждый раз писать не требуется.

    Описание всех параметров шаблона attach_images.tpl :

    • image_key — уникальный ключ массива (если используется загрузка нескольких картинок одновременно, по умолчанию — 0 ).
    • image_name — уникальное имя, идентифицирующее пару картинок для данного объекта.
    • image_object_type — тип объекта, в котором будут храниться картинки.
    • image_object_id — идентификатор объекта, для которого загружаются картинки.
    • image_type — тип пары: M — main, A — additional.
    • icon_title — заголовок для иконки ( \$lang.thumbanil по умолчанию).
    • icon_text — описание для иконки (пустой по умолчанию).
    • detailed_title — заголовок для детальной картинки ( \$lang.popup_larger_image по умолчанию).
    • detailed_text — описание для детальной картинки (пустой по умолчанию).
    • hide_titles — если true , то скрывает заголовки и описания.
    • hide_images — если true , то скрывает картинки (оставляет только форму для загрузки).
    • no_detailed — если true , не показывает детальную картинку.
    • delete_pair — если true , показывается ссылка для удаления пары.

    Изменения размера “на лету”¶

    Добавлена возможность изменять размер картинок “на лету” на витрине. Для этого надо вызвать следующий URL:

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

    Содержание

    • Установка и переезд
    • Администрирование
    • Разработка
      • Начало разработки
      • Быстрый старт
      • Платформа
        • Структура платформы
        • Стандарты разработки
        • Контекстное меню
        • Контроллеры
        • Front-end
        • Работа с базой данных MySQL
        • Настройки
        • Редактор документов и писем
        • Уведомления о событиях
        • Переводы и мультиязычность
        • Мультивитринность
        • Что такое Sharing и для чего он нужен
        • Мультипоточность способов доставки
        • Безопасность
        • Как добавить картинку к объекту
        • Опции и исключения
        • Характеристики и фильтры
        • Класс Application
        • Класс Registry
        • Last View
        • Роутинг
        • Схемы и их устройство
        • Центр обновлений
        • Дизайн
        • Обновление CS-Cart
        • Часто задаваемые вопросы
        • История изменений

        Сейчас

        • Как добавить картинку к объекту
          • Шаг ​1. В шаблоне вставить следующую строку:
          • Шаг ​2. В php коде, который отвечает за обновление объекта пишем:
          • Шаг ​3. В php коде, который отвечает за выборку информации об объекте, пишем:
          • Шаг ​4. В php коде, который отвечает за удаление объекта, пишем:
          • Изменения размера “на лету”

          PHP. Загрузка изображений на сервер

          Итак, мы продолжаем обсуждать тему загрузки файлов на сервер. Если вы ещё не читали статью «Что необходимо учитывать при загрузке файлов на сервер», то рекомендую начать именно с неё.

          В вышеуказанной статье мы обсудили общие нюансы загрузки файлов на сервер. А теперь пришло время программировать! В данном примере мы реализуем:

          1. Корректную загрузку картинки на сервер.
          2. Проверку, выбран файл или нет.
          3. Проверку на размер файла.
          4. Грамотную проверку расширения файла.

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

          Для начала определим, какие файлы и папки будут в нашем проекте:

          1. index.php – обработчик отправки формы
          2. functions.php – библиотека с двумя функциями
          3. img – папка, в которую будут загружаться изображения

          Посмотрим на содержимое индекса.

               Загрузка изображений на сервер    Файл успешно загружен!"; > else< // выводим сообщение об ошибке echo "$check"; > > ?>  

          Кода много, но, пожалуйста, не пугайтесь! Большая часть знакома вам из предыдущей статьи.

          Главное — просто понять схему работы данного скрипта. У нас есть две функции:

          1. can_upload – производит все проверки: возвращает true либо строку с сообщением об ошибке
          2. make_upload – производит загрузку файла на сервер

          Соответственно, если форма была отправлена, мы сначала вызываем функцию can_upload. Если она подтвердила, что файл подходит нам по всем параметрам, то мы вызываем функцию make_upload. Иначе просто распечатываем сообщение об ошибке.

          Здесь всё достаточно коротко и логично. Схема стандартная. Поэтому нас больше интересует, а что именно делают эти загадочные функции can_upload и make_upload!

          Загрузка изображений — фукнции.

          Рассмотрим файл functions.php

           function make_upload($file) < // формируем уникальное имя картинки: случайное число и name $name = mt_rand(0, 10000) . $file['name']; copy($file['tmp_name'], 'img/' . $name); >

          Сначала всего пару слов про функцию make_upload, поскольку она проще. Обратите внимание на то, что мы перед именем файла вставляем mt_rand(0, 10000), т.е, случайное число от 0 до 10000. Делается это для того, чтобы у файла было уникальное имя. В противном случае, при загрузке двух картинок с одинаковыми именами, вторая заменит первую.

          Кстати, если вы задались резонным вопросом, а где же закрывающий тег php в данном файле, значит, вы явно не читали статью «Ошибка headers already sent»!

          Необходимые проверки

          Основной же интерес для нас представляет функция can_upload.

          ($file[‘name’] == ») — мелочь, знакомая вам по предыдущей статье.

          А вот ($file[‘size’] == 0) — это забавно! Особенно с учётом того, что мы говорим при этом, что файл слишком большой! Разгадка кроется в том, что если файл был больше, чем разрешено в настройках сервера, то он не будет загружен вообще. А если файл не загружен, то вполне логично, что его размер равен нулю.

          Ну и наконец, проверка расширения. Здесь мы используем так называемую технику белого листа. Таким листом у нас является массив $types, в котором мы перечисляем все допустимые расширения. Если расширение загружаемого файла не найдено в массиве, значит нам загружают что-то не то.

          Вот собственно говоря и всё! Скрипт надёжный, аккуратный и лаконичный.

          А в следующей статье мы поговорим о том, как можно наложить на загружаемую картинку водяной знак. Рекомендую прочесть!

          Понравился материал? Поделись с друзьями!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *