Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Przekonwertowanie jpeg na bmp 8 bit, Skrypt który z pliku jpg zrobi bitmapę 8 bpp, czyli w 256-kolorach
Freeman555
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 29.10.2016

Ostrzeżenie: (0%)
-----


Witam,

Zmagam się z takim problemem, mam plik w formacie jpeg, chce go przerobić na bmp z 8 bitową głębią kolorów czyli po 256 na każde RGB;
Kodzik znaleziony w internetach który przerabia na 16 bit;

  1. <?php
  2. //convert jpeg to 16 bit bmp
  3.  
  4. $jpgImageFile = '51.jpg';
  5. $newFileName = 'NEW_BMP';
  6.  
  7.  
  8. $imageSource = imagecreatefromjpeg($jpgImageFile);
  9. imagebmp($imageSource,$newFileName.".bmp");
  10.  
  11.  
  12. function imagebmp(&$im, $filename = "")
  13. {
  14. if (!$im) return false;
  15. $w = imagesx($im);
  16. $h = imagesy($im);
  17. $result = '';
  18.  
  19. if (!imageistruecolor($im)) {
  20. $tmp = imagecreatetruecolor($w, $h);
  21. imagecopy($tmp, $im, 0, 0, 0, 0, $w, $h);
  22. imagedestroy($im);
  23. $im = & $tmp;
  24. }
  25.  
  26. $biBPLine = $w * 2;
  27. $biStride = ($biBPLine + 3) & ~3;
  28. $biSizeImage = $biStride * $h;
  29. $bfOffBits = 66;
  30. $bfSize = $bfOffBits + $biSizeImage; //BITMAPFILEHEADER's size + BITMAPINFOHEADER size
  31. $result .= substr('BM', 0, 2);
  32. $result .= pack ('VvvV', $bfSize, 0, 0, $bfOffBits);
  33. $result .= pack ('VVVvvVVVVVV', 40, $w, '-'.$h, 1, 16, 3, $biSizeImage, 0, 0, 0, 0);
  34. $numpad = $biStride - $biBPLine;
  35.  
  36.  
  37. $result .= pack('VVV',63488,2016,31);
  38. for ($y = 0; $y < $h; ++$y) {
  39. for ($x = 0; $x < $w; ++$x) {
  40.  
  41. $rgb = imagecolorat($im, $x, $y);
  42. $r24 = ($rgb >> 16) & 0xFF;
  43. $g24 = ($rgb >> 8) & 0xFF;
  44. $b24 = $rgb & 0xFF;
  45. $col = ((($r24 >> 3) << 11) | (($g24 >> 2) << 5) | ($b24 >> 3));
  46. $result .= pack('v',$col);
  47. }
  48. for ($i = 0; $i < $numpad; ++$i)
  49. $result .= pack ('C', 0);
  50. }
  51. if($filename==""){
  52. }
  53. else
  54. {
  55. $file = fopen($filename, "wb");
  56. fwrite($file, $result);
  57. fclose($file);
  58. }
  59. return true;
  60. }
  61. ?>


Na głównej stronie projektu PHP w pierwszym komentarzu jest kod na przeróbkę dla bmp 24 bit;
http://lv.php.net/manual/en/ref.image.php#63689

Zwraca się z prośbą o pomoc w przeróbce na 8 bitów.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 26.12.2025 - 20:12