Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Konwersja w locie z png na bmp
Forum PHP.pl > Forum > Przedszkole
gsmphone
Witam,

Nie mogę zrobić żeby działało. Chciałbym przekonwertować w locie obrazek PNG na BMP ale nie działa.

Kod działa jak konwertuje z PNG na JPG czy GIF. Co mam robić?

  1. <?php
  2. $im = imagecreatefrompng("aaa.png");
  3. imagejpeg($im, 'image.jpg');
  4. ?>


Z góry dziękuje za pomoc.
Kshyhoo
Przykład z manunala:
  1. <?php
  2. $file = 'php.png';
  3. $image = imagecreatefrompng($file);
  4.  
  5. header('Content-type: ' . image_type_to_mime_type(IMAGETYPE_WBMP));
  6. image2wbmp($image); // output the stream directly
  7. imagedestroy($image);
  8. ?>
gsmphone
No tak, tyle że WBMP to nie jest to samo co BMP
piotrooo89
to prze konwertuj na zwykłe BMP blink.gif za pomocą IMAGETYPE_BMP.
gsmphone
Zrobiłem tak jak piszesz ale to też nie działa:

  1. <?php
  2.  
  3. $im = 'aaa.png';
  4.  
  5. imagebmp($im, image_type_to_extension(IMAGETYPE_BMP));
  6.  
  7. imagedestroy($im);
  8.  
  9. ?>
Kshyhoo
To może tak:
  1. <?php
  2. $jpgImageFile = 'Myjpg.jpg';
  3. $newFileName = 'MyBmp';
  4.  
  5.  
  6. $imageSource = imagecreatefromjpeg($jpgImageFile);
  7. imagebmp($imageSource,$newFileName.".bmp");
  8.  
  9.  
  10. function imagebmp(&$im, $filename = "")
  11. {
  12. if (!$im) return false;
  13. $w = imagesx($im);
  14. $h = imagesy($im);
  15. $result = '';
  16.  
  17. if (!imageistruecolor($im)) {
  18. $tmp = imagecreatetruecolor($w, $h);
  19. imagecopy($tmp, $im, 0, 0, 0, 0, $w, $h);
  20. imagedestroy($im);
  21. $im = & $tmp;
  22. }
  23.  
  24. $biBPLine = $w * 3;
  25. $biStride = ($biBPLine + 3) & ~3;
  26. $biSizeImage = $biStride * $h;
  27. $bfOffBits = 54;
  28. $bfSize = $bfOffBits + $biSizeImage;
  29.  
  30. $result .= substr('BM', 0, 2);
  31. $result .= pack ('VvvV', $bfSize, 0, 0, $bfOffBits);
  32. $result .= pack ('VVVvvVVVVVV', 40, $w, $h, 1, 24, 0, $biSizeImage, 0, 0, 0, 0);
  33.  
  34. $numpad = $biStride - $biBPLine;
  35. for ($y = $h - 1; $y >= 0; --$y) {
  36. for ($x = 0; $x < $w; ++$x) {
  37. $col = imagecolorat ($im, $x, $y);
  38. $result .= substr(pack ('V', $col), 0, 3);
  39. }
  40. for ($i = 0; $i < $numpad; ++$i)
  41. $result .= pack ('C', 0);
  42. }
  43.  
  44. if($filename==""){
  45. echo $result;
  46. }
  47. else
  48. {
  49. $file = fopen($filename, "wb");
  50. fwrite($file, $result);
  51. fclose($file);
  52. }
  53. return true;
  54. }
  55. ?>

albo:
  1. <?php
  2. function imagebmp(&$im, $filename = "")
  3. {
  4. if (!$im) return false;
  5. $w = imagesx($im);
  6. $h = imagesy($im);
  7. $result = '';
  8.  
  9. if (!imageistruecolor($im)) {
  10. $tmp = imagecreatetruecolor($w, $h);
  11. imagecopy($tmp, $im, 0, 0, 0, 0, $w, $h);
  12. imagedestroy($im);
  13. $im = & $tmp;
  14. }
  15.  
  16. $biBPLine = $w * 2;
  17. $biStride = ($biBPLine + 3) & ~3;
  18. $biSizeImage = $biStride * $h;
  19. $bfOffBits = 66;
  20. $bfSize = $bfOffBits + $biSizeImage;
  21. $result .= substr('BM', 0, 2);
  22. $result .= pack ('VvvV', $bfSize, 0, 0, $bfOffBits);
  23. $result .= pack ('VVVvvVVVVVV', 40, $w, '-'.$h, 1, 16, 3, $biSizeImage, 0, 0, 0, 0);
  24. $numpad = $biStride - $biBPLine;
  25.  
  26.  
  27. //for ($y = $h - 1; $y >= 0; --$y) {
  28. $result .= pack('VVV',63488,2016,31);
  29. for ($y = 0; $y < $h; ++$y) {
  30. for ($x = 0; $x < $w; ++$x) {
  31.  
  32. $rgb = imagecolorat($im, $x, $y);
  33. $r24 = ($rgb >> 16) & 0xFF;
  34. $g24 = ($rgb >> 8) & 0xFF;
  35. $b24 = $rgb & 0xFF;
  36. $col = ((($r24 >> 3) << 11) | (($g24 >> 2) << 5) | ($b24 >> 3));
  37. $result .= pack('v',$col);
  38. }
  39. for ($i = 0; $i < $numpad; ++$i)
  40. $result .= pack ('C', 0);
  41. }
  42. if($filename==""){
  43. }
  44. else
  45. {
  46. header( "Content-type: image/bmp" );
  47. echo $result;
  48. imagedestroy( $result );
  49. }
  50. return true;
  51. }
  52. ?>
gsmphone
Dzięki. Twoje pierwsze rozwiązanie działa dobrze:-)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.