Heim >Backend-Entwicklung >PHP-Tutorial >Detaillierte Erläuterung der Methode zur Verarbeitung von Bildern im BMP-Format in PHP

Detaillierte Erläuterung der Methode zur Verarbeitung von Bildern im BMP-Format in PHP

墨辰丷
墨辰丷Original
2018-05-19 17:52:471839Durchsuche

In diesem Artikel wird hauptsächlich die Methode zur Verarbeitung von Bildern im BMP-Format durch PHP vorgestellt. Er analysiert die zugehörigen Funktionen und Verwendungstechniken von Bildern im BMP-Format anhand spezifischer Beispiele:

Im Laufe des Tages wies die Qualitätssicherung darauf hin, dass es beim Hochladen von Bildern des Projekts ein Problem gab, insbesondere: Der Upload war erfolgreich, aber die Vorschau schlug fehl. Nachdem ich dort war, habe ich ein paar weitere Bilder zum Hochladen hochgeladen, ihn dann sorgfältig gefragt, welches Bild er hochgeladen hat, und nachdem ich es gelesen hatte, habe ich es mit der Funktion getimagesize ausgedruckt.

Array
(
  [0] => 494
  [1] => 260
  [2] => 6
  [3] => width="494" height="260"
  [bits] => 24
  [mime] => image/x-ms-bmp
)

Schauen Sie genau hin, das oben gedruckte Array enthält eine Mime-Datei von image/x-ms-bmp, die im BMP-Format vorliegt Die PHP-Bibliothek wurde später nicht verarbeitet und konnte nicht hochgeladen werden, solange die Mime-Datei vorhanden war.

Nachdem ich am Abend zurückkam, suchte ich im Internet nach Methoden im Zusammenhang mit der PHP-Verarbeitung von BMP und fand sie schließlich in Stackoverflow. In dem Beitrag stand, dass es eine ImageCreateFromBMP-Methode zum Eingeben von Funktionskommentaren gibt Über imagecreate auf der offiziellen Website: Rufen Sie diese Funktion zunächst für Dateien im BMP-Format auf und speichern Sie sie dann mit imagejpeg.

<?php
function ImageCreateFromBMP($filename) {
  //Ouverture du fichier en mode binaire
  if (!$f1 = fopen($filename, "rb"))
    return FALSE;
  //1 : Chargement des ent�tes FICHIER
  $FILE = unpack("vfile_type/Vfile_size/Vreserved/Vbitmap_offset", fread($f1, 14));
  if ($FILE[&#39;file_type&#39;] != 19778)
    return FALSE;
  //2 : Chargement des ent�tes BMP
  $BMP = unpack(&#39;Vheader_size/Vwidth/Vheight/vplanes/vbits_per_pixel&#39; .
      &#39;/Vcompression/Vsize_bitmap/Vhoriz_resolution&#39; .
      &#39;/Vvert_resolution/Vcolors_used/Vcolors_important&#39;, fread($f1, 40));
  $BMP[&#39;colors&#39;] = pow(2, $BMP[&#39;bits_per_pixel&#39;]);
  if ($BMP[&#39;size_bitmap&#39;] == 0)
    $BMP[&#39;size_bitmap&#39;] = $FILE[&#39;file_size&#39;] - $FILE[&#39;bitmap_offset&#39;];
  $BMP[&#39;bytes_per_pixel&#39;] = $BMP[&#39;bits_per_pixel&#39;] / 8;
  $BMP[&#39;bytes_per_pixel2&#39;] = ceil($BMP[&#39;bytes_per_pixel&#39;]);
  $BMP[&#39;decal&#39;] = ($BMP[&#39;width&#39;] * $BMP[&#39;bytes_per_pixel&#39;] / 4);
  $BMP[&#39;decal&#39;] -= floor($BMP[&#39;width&#39;] * $BMP[&#39;bytes_per_pixel&#39;] / 4);
  $BMP[&#39;decal&#39;] = 4 - (4 * $BMP[&#39;decal&#39;]);
  if ($BMP[&#39;decal&#39;] == 4)
    $BMP[&#39;decal&#39;] = 0;
  //3 : Chargement des couleurs de la palette
  $PALETTE = array();
  if ($BMP[&#39;colors&#39;] < 16777216) {
    $PALETTE = unpack(&#39;V&#39; . $BMP[&#39;colors&#39;], fread($f1, $BMP[&#39;colors&#39;] * 4));
  }
  //4 : Cr�ation de l&#39;image
  $IMG = fread($f1, $BMP[&#39;size_bitmap&#39;]);
  $VIDE = chr(0);
  $res = imagecreatetruecolor($BMP[&#39;width&#39;], $BMP[&#39;height&#39;]);
  $P = 0;
  $Y = $BMP[&#39;height&#39;] - 1;
  while ($Y >= 0) {
    $X = 0;
    while ($X < $BMP[&#39;width&#39;]) {
      if ($BMP[&#39;bits_per_pixel&#39;] == 24)
        $COLOR = unpack("V", substr($IMG, $P, 3) . $VIDE);
      elseif ($BMP[&#39;bits_per_pixel&#39;] == 16) {
        $COLOR = unpack("n", substr($IMG, $P, 2));
        $COLOR[1] = $PALETTE[$COLOR[1] + 1];
      } elseif ($BMP[&#39;bits_per_pixel&#39;] == 8) {
        $COLOR = unpack("n", $VIDE . substr($IMG, $P, 1));
        $COLOR[1] = $PALETTE[$COLOR[1] + 1];
      } elseif ($BMP[&#39;bits_per_pixel&#39;] == 4) {
        $COLOR = unpack("n", $VIDE . substr($IMG, floor($P), 1));
        if (($P * 2) % 2 == 0)
          $COLOR[1] = ($COLOR[1] >> 4);
        else
          $COLOR[1] = ($COLOR[1] & 0x0F);
        $COLOR[1] = $PALETTE[$COLOR[1] + 1];
      }
      elseif ($BMP[&#39;bits_per_pixel&#39;] == 1) {
        $COLOR = unpack("n", $VIDE . substr($IMG, floor($P), 1));
        if (($P * 8) % 8 == 0)
          $COLOR[1] = $COLOR[1] >> 7;
        elseif (($P * 8) % 8 == 1)
          $COLOR[1] = ($COLOR[1] & 0x40) >> 6;
        elseif (($P * 8) % 8 == 2)
          $COLOR[1] = ($COLOR[1] & 0x20) >> 5;
        elseif (($P * 8) % 8 == 3)
          $COLOR[1] = ($COLOR[1] & 0x10) >> 4;
        elseif (($P * 8) % 8 == 4)
          $COLOR[1] = ($COLOR[1] & 0x8) >> 3;
        elseif (($P * 8) % 8 == 5)
          $COLOR[1] = ($COLOR[1] & 0x4) >> 2;
        elseif (($P * 8) % 8 == 6)
          $COLOR[1] = ($COLOR[1] & 0x2) >> 1;
        elseif (($P * 8) % 8 == 7)
          $COLOR[1] = ($COLOR[1] & 0x1);
        $COLOR[1] = $PALETTE[$COLOR[1] + 1];
      } else
        return FALSE;
      imagesetpixel($res, $X, $Y, $COLOR[1]);
      $X++;
      $P += $BMP[&#39;bytes_per_pixel&#39;];
    }
    $Y--;
    $P+=$BMP[&#39;decal&#39;];
  }
  //Fermeture du fichier
  fclose($f1);
  return $res;
}
$pic = &#39;2.bmp&#39;;
$res = ImageCreateFromBMP($pic);
imagepng($res, &#39;1.png&#39;);
imagejpeg($res, &#39;1.jpeg&#39;);

Verwandte Empfehlungen:

bmpimage php wird Konvertieren Sie BMP-Bilder in JPG und andere Bilder in einem beliebigen Format

BMP-Bilder im PHP-Format. Konvertieren Sie BMP-Bilder in jpg und andere Bilder in jedem Format

php verwendet die GD-Bibliothek, um Bilder im bmp-Format (imagebmp)

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Methode zur Verarbeitung von Bildern im BMP-Format in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn