Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] bmp na jpeg
Forum PHP.pl > Forum > PHP
Lejto
mam kod który wysyła i zmniejsza zdjęcie na serwerze chcę aby jak ktoś wyśle plik .bmp przerobiło go na .jpeg, z rozszerzeniami wygląda u mnie tak:
  1. <?php
  2. $typ_pliku = $_FILES['obraz']['type'];
  3.  
  4. switch($typ_pliku)
  5. {
  6. case 'image/jpeg':
  7. $pref_gd = "jpeg";
  8. break;
  9. case 'image/png':
  10. $pref_gd = "png";
  11. break;
  12. case 'image/pjpeg':
  13. $pref_gd = "jpeg";
  14. break;
  15. }
  16. ?>

$pref_gd potrzebny jest to zmniejszenia zdjęcia...
l0ud
Pokaż cały kod, bo widzę, że będą potrzebne przeróbki smile.gif
Lejto
ok
dodaj.php
  1. <?php
  2. //(c) Lukasz Ogan, 2008 : All Rights Reserved
  3. $opis = $_POST['opis'];
  4. $data = date('d.m.y H:i:s');
  5. ?>
  6. <style>
  7. #bad{color:#FF3300; font-size:11px; font-weight:bold; text-align:center;}
  8. </style>
  9. <?
  10. if(!empty($_POST['obraz']))
  11. {
  12. die ("<span id=bad>Wskaż plik do wysłania</span><br>
  13. <span id=href4><a href=index.php?co=add_image>Wstecz</a></span>
  14. ");
  15. }
  16.  
  17. //ustala typ mime pliku i tworzy odpowiedni prefix dla funkcji GD
  18. $typ_pliku = $_FILES['obraz']['type'];
  19.  
  20. switch($typ_pliku)
  21. {
  22.  case 'image/jpeg':
  23. $pref_gd = "jpeg";
  24. break;
  25.  case 'image/jpg':
  26. $pref_gd = "jpg";
  27. break;
  28.  case 'image/png':
  29. $pref_gd = "png";
  30. break;
  31.  case 'image/pjpeg':
  32. $pref_gd = "jpeg";
  33. break;  
  34. }
  35.  
  36. $nazwa1 = date("His");//wykorzystanie daty do wygenerowania nowej nazwy dla pliku
  37. $nazwa2 = $_FILES['obraz']['name'];//pobranie nazwy pliku z tablicy
  38. $nazwa_zmieniona = "$nazwa1$nazwa2";//połączenie daty z nazwą pliku
  39.  
  40. //zamienia polskie litery z języczkami aby nie znalazły się w nazwie fotki
  41. $nazwa_zmieniona = strtolower($nazwa_zmieniona);
  42. $nazwa_zmieniona = ereg_replace(" ","_",$nazwa_zmieniona);
  43. $nazwa_zmieniona = ereg_replace("ą","a",$nazwa_zmieniona);
  44. $nazwa_zmieniona = ereg_replace("ę","e",$nazwa_zmieniona);
  45. $nazwa_zmieniona = ereg_replace("ź","z",$nazwa_zmieniona);
  46. $nazwa_zmieniona = ereg_replace("ż","z",$nazwa_zmieniona);
  47. $nazwa_zmieniona = ereg_replace("ó","o",$nazwa_zmieniona);
  48. $nazwa_zmieniona = ereg_replace("ł","l",$nazwa_zmieniona);
  49. $nazwa_zmieniona = ereg_replace("ś","s",$nazwa_zmieniona);
  50. $nazwa_zmieniona = ereg_replace("Ś","s",$nazwa_zmieniona);
  51. $nazwa_zmieniona = ereg_replace("ć","c",$nazwa_zmieniona);
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58. $nazwapliku = $_FILES['obraz']['name'];
  59. $nazwapliku1 = explode('.', $nazwapliku);
  60. $np = count($nazwapliku1);
  61. $count = $np -1;
  62.  
  63. try
  64. {
  65.  
  66. if($nazwapliku1[$count]<>"jpg" && $nazwapliku1[$count]<>"png" &&
  67. $nazwapliku1[$count]<>"BMP" && $nazwapliku1[$count]<>"bmp" &&
  68. $nazwapliku1[$count]<>"gif" && $nazwapliku1[$count]<>"img" &&  
  69. $nazwapliku1[$count]<>"JPG" && $nazwapliku1[$count]<>"PNG" && 
  70. $nazwapliku1[$count]<>"GIF" && $nazwapliku1[$count]<>"IMG")
  71. { 
  72. die ("<span id=bad>Nie możesz wgrywać innych plików niż jpg, png, gif, img, bmp</span><br>
  73. <span id=href4><a href=index.php?co=add_image>Wstecz</a></span>
  74. ");
  75. } 
  76.  
  77. if($HTTP_POST_FILES["obraz"]["size"] > 1024 * 1024)
  78. {
  79. die("<b>BŁĄD: Rozmiar pliku przekracza dopuszczalny limit 1MB!</b>");
  80. }
  81.  
  82.  
  83. $file = "./galeria_users/obrazy/".$nazwa_zmieniona."";
  84.  
  85. if(move_uploaded_file($_FILES['obraz']['tmp_name'],"./galeria_users/obrazy/".$nazwa_zmieniona))
  86. {
  87.  
  88. chmod($file, 0755);
  89. if(file_exists("./galeria_users/obrazy/".$nazwa_zmieniona))
  90.  {
  91.  include("./galeria_users/create_min.php");
  92.  } 
  93.  
  94. $dodal = $_SESSION['prawid_uzyt'];
  95. $zapytaj = mysql_query("select * from uzytkownik where user = '".$dodal."'");
  96. $row = mysql_fetch_object($zapytaj);
  97.  
  98. $numer = $row->id;
  99.  
  100. $sql = "insert into galeria_users (obraz,data_dodania,dodal,numer,opis)
  101.  values ('".$nazwa_zmieniona."', '".$data."', '".$dodal."', '".$numer."','".$opis."')";
  102. $query = mysql_query($sql);
  103.  
  104. echo "<br>";
  105. echo "<center><b><font size='3px' color='blue'>Zdjęcie pomyślnie wgrane na serwer!</font><br>";
  106. echo "<span id=\"href3\"><a href='?co=add_image'>Dodaj nowe zdjęcie</a></b></center>";
  107. echo "<br>";
  108. echo "<center><span id=\"href5\"><b><a href='?kto=pokaz_galeria&id=$numer'>Do galerii</a></b></center>";
  109.  
  110.  
  111.  
  112.  
  113. }
  114. else
  115. {
  116. switch($_FILES['obraz']['error'])
  117. {
  118. case 1: echo ('Przesłany plik jest większy niż zezwala konfiguracja serwera.');
  119. break;
  120. case 2: echo ('Przesłany plik jest wiekszy niż zezwala formularz.');
  121. break;
  122. case 3: echo ('Przesłano tylko część pliku.');
  123. break;
  124. case 4: echo ('Plik nie został przesłany.');
  125. break;
  126. }
  127. }
  128.  
  129. }
  130.  
  131.  catch (Exception $e)
  132. {
  133.  echo $e->getMessage();
  134.  exit;
  135.  
  136.  }

create_min.php
  1. <!-- skrypt odpowiedzialny za przetwarzanie zdjęć -->
  2. <?
  3. //Tworzy miniaturę
  4. $obrazek_minn = "$nazwa_zmieniona";
  5. $max_width = 150;//default 150
  6. $max_height = 113;//default 300
  7. $size = @getimagesize($file);
  8. $width = $size[0];
  9. $height = $size[1];
  10. $x_ratio = $max_width / $width;
  11. $y_ratio = $max_height / $height;
  12. if(($width <= $max_width) && ($height <= $max_height))
  13. {
  14.  $tn_width = $width;
  15.  $tn_height = $height;
  16. }
  17. else if(($x_ratio * $height) < $max_height)
  18. {
  19.  $tn_height = ceil($x_ratio * $height);
  20.  $tn_width = $max_width;
  21. }
  22. else
  23. {
  24.  $tn_width = ceil($y_ratio * $width);
  25.  $tn_height = $max_height;
  26. }
  27.  
  28. $func_plus_prefix_1 = "ImageCreateFrom".$pref_gd;
  29. $func_plus_prefix_2 = "image".$pref_gd;
  30.  
  31. $src = @$func_plus_prefix_1($file);
  32. $dst = @imagecreatetruecolor($tn_width, $tn_height);
  33. @imagecopyresampled($dst, $src, 0, 0, 0, 0, $tn_width, $tn_height, $width, $height);
  34. //Header('Content-type: image/jpeg');
  35. @$func_plus_prefix_2($dst, "./miniatury/".$obrazek_minn, 100);
  36.  
  37. //koniec tworzenia miniatury
  38. ?>
l0ud
To:
  1. <?php
  2. $typ_pliku = $_FILES['obraz']['type'];
  3.  
  4. switch($typ_pliku)
  5. {
  6.  case 'image/jpeg':
  7. $pref_gd = "jpeg";
  8. break;
  9.  case 'image/jpg':
  10. $pref_gd = "jpg";
  11. break;
  12.  case 'image/png':
  13. $pref_gd = "png";
  14. break;
  15.  case 'image/pjpeg':
  16. $pref_gd = "jpeg";
  17. break;  
  18. }
  19. ?>


zamieniamy na:

  1. <?php
  2. $typ_pliku = getimagesize($_FILES['obraz']['tmp_name']);
  3.  
  4. switch($typ_pliku[2])
  5. {
  6.  case 2: //jpg
  7. $pref_in_gd = "jpeg";
  8. $pref_out_gd = "jpeg";
  9. break;
  10.  case 3: //png
  11. $pref_in_gd = "png";
  12. $pref_out_gd = "png";
  13. break;
  14.  case 6: //bmp
  15. $pref_in_gd = "bmp";
  16. $pref_out_gd = "jpeg";
  17. break;
  18. }
  19. ?>


Linie:
  1. <?php
  2. $func_plus_prefix_1 = "ImageCreateFrom".$pref_gd;
  3. $func_plus_prefix_2 = "image".$pref_gd;
  4. ?>


zamieniamy na:

  1. <?php
  2. $func_plus_prefix_1 = "ImageCreateFrom".$pref_in_gd;
  3. $func_plus_prefix_2 = "image".$pref_out_gd;
  4. ?>


Jako że GD2 nie wspiera obsługi plików bmp, trzeba zaincludować oddzielne funkcje.

http://www.hotscripts.com/Detailed/41077.html

Dołącz tam, gdzie skrypt generuje miniaturkę. Fakt faktem, że funkcje są na licencji GPL ;/

Nie testowałem kodu i może jeszcze nie działać z powodu innych niedostosowanych fragmentów. Mam nadzieję chociaż że naprowadziłem Cię na właściwą ścieżkę smile.gif

Pozdrawiam
Lejto
nic nie dało w ogóle zdjęcie się nie ładuje winksmiley.jpg
  1. <?php
  2. case 6: //bmp
  3. $pref_in_gd = "bmp";
  4. $pref_out_gd = "jpeg";
  5. break;
  6. ?>

nie ma ImageCreateFrombmp
tylko imagecreatefromwbmp <- (tez próbowałem na podstawie manuala i nic też nie działa obrazek wyśle miniaturę wyśle ale całą czarną albo białą) i inne
jest jakiś inny sposób??
l0ud
Cytat
nie ma ImageCreateFrombmp


Przeczytaj mój post do końca...
Lejto
ok,
zrobić to na podstawie linku który mi podałeś?
l0ud
A co jest w tym linku? Brakujące funkcje! smile.gif m.in. ImageCreateFrombmp którą wczytasz ten obrazek. Musisz tylko je zaincludować do skryptu.
Lejto
ok, dzięki za pomoc
Babcia@Stefa
Lejto, taka drobna uwaga.

Dlaczego używasz try i catch jeśli w środku try {} nie używasz klas własnych?
No chyba że coś przeoczyłem smile.gif - jeśli tak to przepraszam biggrin.gif

Dziękuję, Babcia@Stefa
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.