Avatar billede newbie_dk Nybegynder
28. februar 2007 - 11:54 Der er 1 løsning

Konverter bmp og gif til jpg

Hvordan kan jeg konvertere billeder som folk uploader til jpg?
Avatar billede sjh Nybegynder
28. februar 2007 - 12:12 #1
Noget i den stil..

<?php
  $Source = "filename.(gif, jpg, png, bmp, wbmp, xbm)"
  $hImg = ImageCreateFromFile($Source);
  ImageJPEG($hImg, "filename.jpg", 85);
  ImageDestroy($hImg);

    function ImageCreateFromFile($strFilename) {
        if (file_exists($strFilename)) {
            list($nWidth, $nHeight, $nType) = @GetImageSize($strFilename);
            switch($nType) {
                    case 1:  $hImg = ImageCreateFromGIF ($strFilename); break;
                    case 2:  $hImg = ImageCreateFromJPEG($strFilename); break;
                    case 3:  $hImg = ImageCreateFromPNG ($strFilename); break;
                    case 6:  $hImg = ImageCreateFromBMP ($strFilename); break;
                    case 15: $hImg = ImageCreateFromWBMP($strFilename); break;
                    case 16: $hImg = ImageCreateFromXBM ($strFilename); break;
                    default: $hImg = 0; break;
            }
            return $hImg;
        }
    }

  // Function for ImageCreateFromBMP()
  function ImageCreateFromBMP($filename) {
    if(!($src_f = fopen($filename, "rb"))) {
      return false;
    }

        $tmp_name = tempnam("/tmp", "GD");
    if(!($dest_f = fopen($tmp_name, "wb"))) {
      return false;
    }

    $header = unpack("vtype/Vsize/v2reserved/Voffset", fread($src_f, 14));
    $info = unpack("Vsize/Vwidth/Vheight/vplanes/vbits/Vcompression/".
        "Vimagesize/Vxres/Vyres/Vncolor/Vimportant", fread($src_f, 40));
 
    extract($info);
    extract($header);
 
    if($type != 0x4D42) {
      return false;
    }
 
    $palette_size = $offset - 54;
    $ncolor = $palette_size / 4;
    $gd_header = "";
 
    $gd_header .= ($palette_size == 0) ? "\xFF\xFE" : "\xFF\xFF";
    $gd_header .= pack("n2", $width, $height);
    $gd_header .= ($palette_size == 0) ? "\x01" : "\x00";
 
    if($palette_size) {
      $gd_header .= pack("n", $ncolor);
    }
 
    $gd_header .= "\xFF\xFF\xFF\xFF";
 
    fwrite($dest_f, $gd_header);
 
    if($palette_size) {
      $palette = fread($src_f, $palette_size);
      $gd_palette = "";
      $j = 0;
 
      while($j < $palette_size) {
        $b = $palette{$j++};
        $g = $palette{$j++};
        $r = $palette{$j++};
        $a = $palette{$j++};
        $gd_palette .= "$r$g$b$a";
      }
 
      $gd_palette .= str_repeat("\x00\x00\x00\x00", 256 - $ncolor);
      fwrite($dest_f, $gd_palette);
    }
 
    $scan_line_size = (($bits * $width) + 7) >> 3;
    $scan_line_align = ($scan_line_size & 0x03) ? 4 - ($scan_line_size & 0x03) : 0;
 
    for($i = 0, $l = $height - 1; $i < $height; $i++, $l--) {
      fseek($src_f, $offset + (($scan_line_size + $scan_line_align) * $l));
      $scan_line = fread($src_f, $scan_line_size);
      if($bits == 24) {
        $gd_scan_line = "";
        $j = 0;
        while($j < $scan_line_size) {
          $b = $scan_line{$j++};
          $g = $scan_line{$j++};
          $r = $scan_line{$j++};
          $gd_scan_line .= "\x00$r$g$b";
        }
      }
      else if($bits == 8) {
        $gd_scan_line = $scan_line;
      }
      else if($bits == 4) {
      $gd_scan_line = "";
      $j = 0;
      while($j < $scan_line_size) {
        $byte = ord($scan_line{$j++});
        $p1 = chr($byte >> 4);
        $p2 = chr($byte & 0x0F);
        $gd_scan_line .= "$p1$p2";
      }
      $gd_scan_line = substr($gd_scan_line, 0, $width);
      }
      else if($bits == 1) {
        $gd_scan_line = "";
        $j = 0;
        while($j < $scan_line_size) {
          $byte = ord($scan_line{$j++});
          $p1 = chr((int) (($byte & 0x80) != 0));
          $p2 = chr((int) (($byte & 0x40) != 0));
          $p3 = chr((int) (($byte & 0x20) != 0));
          $p4 = chr((int) (($byte & 0x10) != 0));
          $p5 = chr((int) (($byte & 0x08) != 0));
          $p6 = chr((int) (($byte & 0x04) != 0));
          $p7 = chr((int) (($byte & 0x02) != 0));
          $p8 = chr((int) (($byte & 0x01) != 0));
          $gd_scan_line .= "$p1$p2$p3$p4$p5$p6$p7$p8";
        }
      $gd_scan_line = substr($gd_scan_line, 0, $width);
    }
    fwrite($dest_f, $gd_scan_line);
    }

    fclose($src_f);
    fclose($dest_f);

        $hImg = ImageCreateFromGD($tmp_name);
        unlink($tmp_name);

    return $hImg;
  }
?>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



Seneste spørgsmål Seneste aktivitet
I går 23:37 Poe strøm Af lurup i LAN/WAN
I går 14:46 GIF-EDITOR Af snestrup2000 i Billedbehandling
I går 14:03 Logge ind Af Bob i PC
I går 12:12 2 skærme - 1 virker - den anden siger No signal Af eksmojo i Skærme
I går 10:33 openvpn projekt Af dcedata1977 i Windows