Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Как поменять цвет фона миниатюр с черного на белый
Форумы портала PHP.SU » » Графика в PHP » Как поменять цвет фона миниатюр с черного на белый

Страниц (1): [1]
 

1. Telnet - 07 Июля, 2011 - 10:53:29 - перейти к сообщению
Есть вот такая функция из Joomla
Работает все нормально миниатюры создаются , но цвет фона у всех прозразных типов (gif,png) получается черный.
Хотя вроде переиенная $white = imagecolorallocate($dest_img, 255, 255, 255);
установлена в белый цвет, но она не где не используется.
Помогите это исправить.
PHP:
скопировать код в буфер обмена
  1.         function createThumb($path){//path to the user folder into upload
  2.                 global $filename;
  3.                 global $username;
  4.                 $orig_directory = realpath(substr("upload".DS.$username.DS."index.html", 0, -10)).DS;//Папка для полноразмерных изображений
  5.                 $thumb_directory = realpath(substr("upload".DS.$username.DS."thumb".DS."index.html", 0, -10)).DS;//Папка для миниатюр
  6.                 $width = 150;//thumb width
  7.                 $height = 100;//thumb height
  8.                 // имя файла с маштабируемым изображением
  9.                 $big = $orig_directory.$filename;
  10.                 // имя файла с уменьшенной копией
  11.                 $small= $thumb_directory.$filename;
  12.                 //определиям коэфицент сжатия генерируемого изображения
  13.                 $ratio = $width/$height;
  14.                 // получаем размеры исходного изображения
  15.                 $size_img = getimagesize($big);
  16.                 list($width_src, $height_src) = getimagesize($big);
  17.                 // если размеры меньше, то маштабирование не нужно
  18.                         if(($width_src<$width) && ($height_src<$height)) {
  19.                                 copy($big, $small);
  20.                                 return true;
  21.                         }
  22.                 // получаем коэфицент сжатия исходного изображения
  23.                 $src_ratio = $width_src/$height_src;
  24.                 // вычисляем размеры уменьшенной копии, чтобы при мащтабировании сохранились пропорции исходного изображения
  25.                         if ($ratio<$src_ratio) {
  26.                                 $height = $width/$src_ratio;
  27.                         }
  28.                         else {
  29.                                 $width = $height*$src_ratio;
  30.                         }
  31.                 // создаем пустое изображение п заданным размерам
  32.                 $dest_img = imagecreatetruecolor($width,$height);
  33.                 $white    = imagecolorallocate($dest_img, 255, 255, 255);
  34.                         if ($size_img[2] == 2)      $src_img = imagecreatefromjpeg($big);
  35.                         else if ($size_img[2] == 1) $src_img = imagecreatefromgif($big);
  36.                         else if ($size_img[2] == 3) $src_img = imagecreatefrompng($big);
  37.                          
  38.                 // маштабируем изображение функцией imagecopysapled()
  39.                 // $dest_img - уменьшенная копия
  40.                 // $src_img  - исходное изображение
  41.                 // $width    - ширина уменьшенной копии
  42.                 // $height   - высота уменьшенной копии
  43.                 // $size_img[0] - ширина исходного изображения
  44.                 // $srze_img[1] - высота исходного изображения
  45.                          
  46.                 imagecopyresampled($dest_img,
  47.                                                         $src_img,
  48.                                                         0,
  49.                                                         0,
  50.                                                         0,
  51.                                                         0,
  52.                                                         $width,
  53.                                                         $height,
  54.                                                         $width_src,
  55.                                                         $height_src);
  56.                          
  57.                 // сохраняем уменьшенную копию в файл
  58.                         if ($size_img[2]==2) imagejpeg($dest_img,$small);
  59.                         else if ($size_img[2]==1) imagegif($dest_img,$small);
  60.                         else if ($size_img[2]==3) imagepng($dest_img,$small);
  61.                 // очищаем память от созданных изображений
  62.                 imagedestroy($dest_img);
  63.                 imagedestroy($src_img);
  64.                 return true;
  65.  
  66.         }
  67.  
2. tsoi85 - 07 Июля, 2011 - 11:18:02 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. #После:
  3. $white = imagecolorallocate($dest_img, 255, 255, 255);
  4. #Добавьте:
  5. imagefill($dest_img, 0, 0, $white);
  6.  
3. Telnet - 07 Июля, 2011 - 12:00:49 - перейти к сообщению
tsoi85 Спасибо за помощь.
Возник еще один вопрос, хотя ситуация мало вероятная, но все же если человек, возмет допустим файл формата 1.DOC и переименует в 1.jpg, то можно сделать так что бы миниатюра вообще не создавалась, а то щас thumb_directory //Папка для миниатюр появляется тот же самый ложный 1.jpg файл, ни какой миниатюры вообще не создается, так как это не картинка вообще но файл 1.jpg сохраняется.
или нужно просто не позволять пользователю осуществлять загрузку таких файлов
Для загрузки использую вот эту функцую
PHP:
скопировать код в буфер обмена
  1.  
  2.         function  UrlUpoald(){
  3.                 global $upload_dir;
  4.                 global $filename;
  5.                 $app = & JFactory::getApplication();
  6.                 $url = JRequest::getVar('url');
  7.                 if(isset($url) && !empty($url)){
  8.                         $filename = basename($url);
  9.                         $ext = JFile::getExt($filename);
  10.                         if($ext=='gif' || $ext=='jpg' || $ext=='jpeg' || $ext=='png'){
  11.                                 //dump(get_headers($url) ,"get_headers");
  12.                                 $filepath = $this->createFolder(). DS .$filename;
  13.                                 $content = file_get_contents($url);
  14.                                 $f = fopen( "$filepath", "w" );
  15.                                 fwrite( $f, $content );
  16.                                 fclose( $f );
  17.                                 $app->enqueueMessage( JText::_('FILE_SAVE_AS').' '.$filepath,'message');
  18.                         } else {
  19.                                 $app->enqueueMessage( JText::_('FILE_TYPE_INVALID'),'error');
  20.                         }
  21.                         return $filepath;
  22.                 }
  23.         }
  24.  

так я там и так делаю проверку по расширению файла, но это не достаточно
для примера положил такой переименованный файл http://smstochka[dot]nx0[dot]ru/123[dot]jpg
вот что показывает функция get_headers("http://smstochka.nx0.ru/123.jpg");
[array] get_headers

[string] 0 = "HTTP/1.1 200 OK"
[string] 1 = "Server: nginx/0.7.67"
[string] 2 = "Date: Thu, 07 Jul 2011 09:31:20 GMT"
[string] 3 = "Content-Type: image/jpeg"
[string] 4 = "Connection: close"
[string] 5 = "Content-Length: 11128"
[string] 6 = "Last-Modified: Thu, 07 Jul 2011 08:09:38 GMT"
[string] 7 = "Accept-Ranges: bytes"
хотя при загрузке на файловые хостинги они как то определяют, что это файл не картинка.
Может мне кто нить помочь, определить правильно тип файла.
4. tsoi85 - 07 Июля, 2011 - 14:17:08 - перейти к сообщению
mime_content_type() - http://www.php.su/functions/?mime-content-type
5. Telnet - 07 Июля, 2011 - 23:42:52 - перейти к сообщению
mime_content_type — Detect MIME Content-type for a file (deprecated)
это отсюда http://www.php.net/manual/en/ref.fileinfo.php
а тут сказано (только PHP 4CVS), а что такое CVS?
а при таком использовании
<?php
echo mime_content_type('http://smstochka[dot]nx0[dot]ru/123[dot]jpg ') ;
?>
пишет Fatal error: Call to undefined function mime_content_type() in Z:\home\localhost\www\First\hlam\filter_list.php on line 2
типа не определенная функция
че то не работает Огорчение
6. tsoi85 - 07 Июля, 2011 - 23:59:32 - перейти к сообщению
Как вариант посмотрите: http://www.php.su/functions/?getimagesize
7. Telnet - 08 Июля, 2011 - 22:11:58 - перейти к сообщению
getimagesize хоть и определяет размер изображений GIF, JPG, PNG, SWF, PSD, TIFF или BMP
браузер кажись понимает только GIF, JPG, PNG ну еще может WebM, новый гугловский формат, все таки это гораздо лучше чем было.

А не подскажите как мне к приведенному в начале поста скрипу для генерации миниатюр, прикрутить функцию позволяющую задавать качество создаваемых GIF и PNG файлов.
А то размеры миниатюры JPG 3-4 кб, а GIF PNG от 7 и более зависит конешно от размера входного файла, хотелось бы уменьшить размер миниатюр.
8. tsoi85 - 08 Июля, 2011 - 22:22:08 - перейти к сообщению
Качество можно задать только для .jpg

 

Powered by ExBB FM 1.0 RC1