Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Можно ли при помощи GDLIB перевести изображение в формат *.ico?
 
 автор: alik   (28.04.2006 в 19:17)   письмо автору
 
 

Если можно, подскажите пожалуйста как?

   
 
 автор: Paxa   (29.04.2006 в 15:28)   письмо автору
 
   для: alik   (28.04.2006 в 19:17)
 

Как я знаю ico это тотже БМП только имя другое
но в винде работает

   
 
 автор: Loki   (02.05.2006 в 11:49)   письмо автору
 
   для: Paxa   (29.04.2006 в 15:28)
 

нет. это не bmp
насколько мне известно, gd с ico не работает.

   
 
 автор: Киналь   (02.05.2006 в 17:26)   письмо автору
 
   для: Loki   (02.05.2006 в 11:49)
 

А какая разница? Что пропишешь, то браузер и покажет. Хоть gif, только не анимированный. Или нет?

   
 
 автор: Loki   (02.05.2006 в 17:59)   письмо автору
 
   для: Киналь   (02.05.2006 в 17:26)
 

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

   
 
 автор: Киналь   (02.05.2006 в 21:24)   письмо автору
 
   для: Loki   (02.05.2006 в 17:59)
 

Хех. а я-то думал, нарисовал 16х16 в Paint и радуйся=) Спасибо за разъяснения.

   
 
 автор: alik   (03.05.2006 в 09:19)   письмо автору
 
   для: Киналь   (02.05.2006 в 21:24)
 

А может быть кто нибудь подскажет как сделать иль може скрипт выдаст иль ссылку? Очень нужно.

   
 
 автор: cheops   (03.05.2006 в 10:05)   письмо автору
 
   для: alik   (03.05.2006 в 09:19)
 

Существуют специальные редакторы иконок - просто набирайте в поисковике "редактор иконок" - найдёте не мало достойных программ.

   
 
 автор: alik   (03.05.2006 в 10:14)   письмо автору
 
   для: cheops   (03.05.2006 в 10:05)
 

та не... Цель такова: при добавлении изображении пользователя, php скрипт должен обработать изображение и перевести его формат в ico.

   
 
 автор: Loki   (03.05.2006 в 10:56)   письмо автору
 
   для: alik   (03.05.2006 в 10:14)
 

Такая штука реализована тут
Может они подскажут как именно... Но сдается мне что сделано не слишком просто.

   
 
 автор: alik   (03.05.2006 в 11:17)   письмо автору
 
   для: Loki   (03.05.2006 в 10:56)
 

я знаю что это можно сделать при помощи phpthumb, но там все так запутано, тяжело разобраться.
p.s смотри во вложенном файле.

   
 
 автор: Trianon   (03.05.2006 в 11:20)   письмо автору
 
   для: alik   (03.05.2006 в 10:14)
 

С описанием формата ICO можно ознакомиться на wotsit.org

   
 
 автор: alik   (03.05.2006 в 16:54)   письмо автору
 
   для: Trianon   (03.05.2006 в 11:20)
 

Люди плиз помогите дубовому человеку. Я нашел скрипт который переводит изображение в ico формат. Но как его использовать....? что-то с классами у меня не все хорошо.

<?
class phpthumb_ico
{
  function 
phpthumb_ico()
  {
    return 
true;
  }
  function 
GD2ICOstring(&$gd_image_array)
  {
    foreach (
$gd_image_array as $key => $gd_image)
    {
      
$ImageWidths[$key]  = ImageSY($gd_image);  // ImageSY - возвращает ширину изображения image в пикселях
      
$ImageHeights[$key] = ImageSY($gd_image);  // ImageSY - возвращает высоту изображения image в пикселях
      
$bpp[$key]          = ImageIsTrueColor($gd_image) ? 32 24//  ImageIsTrueColor - определяет является ли изображение полноцветным
      
$totalcolors[$key]  = ImageColorsTotal($gd_image); // ImageColorsTotal - возвращает количество цветов в цветовой палитре изображения
      
$icXOR[$key] = '';
      for (
$y $ImageHeights[$key] - 1$y >= 0$y--)
      {
        for (
$x 0$x $ImageWidths[$key]; $x++)
        {
          
$argb phpthumb_functions::GetPixelColor($gd_image$x$y);
          
$a round(255 * ((127 $argb['alpha']) / 127));
          
$r $argb['red'];
          
$g $argb['green'];
          
$b $argb['blue'];
          if (
$bpp[$key] == 32)
          {
            
$icXOR[$key] .= chr($b).chr($g).chr($r).chr($a);
          }
          elseif (
$bpp[$key] == 24)
          {
            
$icXOR[$key] .= chr($b).chr($g).chr($r);
          }
          if (
$a 128)
          {
            @
$icANDmask[$key][$y] .= '1';
          }
          else
          {
            @
$icANDmask[$key][$y] .= '0';
          }
        }
        
// mask bits are 32-bit aligned per scanline
        
while (strlen($icANDmask[$key][$y]) % 32)
        {
          
$icANDmask[$key][$y] .= '0';
        }
      }
      
$icAND[$key] = '';
      foreach (
$icANDmask[$key] as $y => $scanlinemaskbits)
      {
        for (
$i 0$i strlen($scanlinemaskbits); $i += 8)
        {
          
$icAND[$key] .= chr(bindec(str_pad(substr($scanlinemaskbits$i8), 8'0'STR_PAD_LEFT)));
        }
      }
    }
    foreach (
$gd_image_array as $key => $gd_image)
    {
      
$biSizeImage $ImageWidths[$key] * $ImageHeights[$key] * ($bpp[$key] / 8);
      
// BITMAPINFOHEADER - 40 bytes
      
$BitmapInfoHeader[$key]  = '';
      
$BitmapInfoHeader[$key] .= "\x28\x00\x00\x00";                              // DWORD  biSize;
      
$BitmapInfoHeader[$key] .= phpthumb_functions::LittleEndian2String($ImageWidths[$key], 4);      // LONG   biWidth;
      // The biHeight member specifies the combined
      // height of the XOR and AND masks.
      
$BitmapInfoHeader[$key] .= phpthumb_functions::LittleEndian2String($ImageHeights[$key] * 24); // LONG   biHeight;
      
$BitmapInfoHeader[$key] .= "\x01\x00";                                      // WORD   biPlanes;
      
$BitmapInfoHeader[$key] .= chr($bpp[$key])."\x00";                          // wBitCount;
      
$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";                              // DWORD  biCompression;
      
$BitmapInfoHeader[$key] .= phpthumb_functions::LittleEndian2String($biSizeImage4);            // DWORD  biSizeImage;
      
$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";                              // LONG   biXPelsPerMeter;
      
$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";                              // LONG   biYPelsPerMeter;
      
$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";                              // DWORD  biClrUsed;
      
$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";                              // DWORD  biClrImportant;
    
}
    
$icondata  "\x00\x00";                                      // idReserved;   // Reserved (must be 0)
    
$icondata .= "\x01\x00";                                      // idType;       // Resource Type (1 for icons)
    
$icondata .= phpthumb_functions::LittleEndian2String(count($gd_image_array), 2);  // idCount;      // How many images?
    
$dwImageOffset + (count($gd_image_array) * 16);
    foreach (
$gd_image_array as $key => $gd_image)
    {
      
// ICONDIRENTRY   idEntries[1]; // An entry for each image (idCount of 'em)
      
$icondata .= chr($ImageWidths[$key]);                     // bWidth;          // Width, in pixels, of the image
      
$icondata .= chr($ImageHeights[$key]);                    // bHeight;         // Height, in pixels, of the image
      
$icondata .= chr($totalcolors[$key]);                     // bColorCount;     // Number of colors in image (0 if >=8bpp)
      
$icondata .= "\x00";                                      // bReserved;       // Reserved ( must be 0)
      
$icondata .= "\x01\x00";                                  // wPlanes;         // Color Planes
      
$icondata .= chr($bpp[$key])."\x00";                      // wBitCount;       // Bits per pixel
      
$dwBytesInRes 40 strlen($icXOR[$key]) + strlen($icAND[$key]);
      
$icondata .= phpthumb_functions::LittleEndian2String($dwBytesInRes4);       // dwBytesInRes;    // How many bytes in this resource?
      
$icondata .= phpthumb_functions::LittleEndian2String($dwImageOffset4);      // dwImageOffset;   // Where in the file is this image?
      
$dwImageOffset += strlen($BitmapInfoHeader[$key]);
      
$dwImageOffset += strlen($icXOR[$key]);
      
$dwImageOffset += strlen($icAND[$key]);
    }
    foreach (
$gd_image_array as $key => $gd_image)
    {
      
$icondata .= $BitmapInfoHeader[$key];
      
$icondata .= $icXOR[$key];
      
$icondata .= $icAND[$key];
    }
    return 
$icondata;
  }
}
?>

плюс файл phpthumb.functions.php

<?
function GetPixelColor(&$img$x$y)
{
  if (!
is_resource($img))
  {
    return 
false;
  }
  return @
ImageColorsForIndex($img, @ImageColorAt($img$x$y));
}

function 
LittleEndian2String($number$minbytes=1)
{
  
$intstring '';
  while (
$number 0)
  {
    
$intstring $intstring.chr($number 255);
    
$number >>= 8;
  }
  return 
str_pad($intstring$minbytes"\x00"STR_PAD_RIGHT);
}
?>

   
 
 автор: Trianon   (03.05.2006 в 17:55)   письмо автору
6.6 Кб
 
   для: alik   (03.05.2006 в 16:54)
 

Пожалуйста. (см.ататч.)
из Вашего фрагмента убраны классы и добавлена форма с файлами изображений.
На выходе формируется файл с иконкой.
Но файлы на вход нужно поставлять определенного размера и цветовой глубины.
Либо заниматься ресэмплингом прямо в скрипте.

   
 
 автор: alik   (03.05.2006 в 18:21)   письмо автору
 
   для: Trianon   (03.05.2006 в 17:55)
 

Большой тебе сэнкс.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования