Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z grafiką w php
Forum PHP.pl > Forum > PHP
Gordon1x
Pobieram obrazek wraz z danymi o nim z bazy danych mysql.
Pobrany obrazek chciał bym zoptymalizować do wybranego rozmiaru zanim zostanie wysłany do użytkownika.

Czy ktoś może przerobić ten kod aby to było możliwe.

  1. <?php
  2. $sql_grafika = "SELECT * FROM galeria WHERE id = '$pathsimg' LIMIT 1"; 
  3. $result_grafika = mysql_query($sql_grafika); 
  4. $row_grafika = mysql_fetch_assoc($result_grafika); 
  5.  
  6. $obrazek = $row_grafika['obrazek']; 
  7. $typ_pliku = $row_grafika['obrazek_mime']; 
  8. $nazwa_pliku = $row_grafika['obrazek_name']; 
  9. $rozmiar_pliku = $row_grafika['obrazek_size']; 
  10.  
  11. // Drukowanie obrazu 
  12.  
  13. header("Content-type:$typ_pliku"); 
  14. header("Content-lenght: $rozmiar_pliku"); 
  15. header("Content-Disposition: attachment; filename = $nazwa_pliku"); 
  16. print ("$obrazek");
  17. ?>
LonelyKnight
Chciałoby się gotowca? smile.gif

Tutaj masz wszystko co jest Ci potrzebne:

http://pl.php.net/manual/pl/ref.image.php
Gordon1x
Przejrzałem podany link i prubowałem przerobić skrypt.

Ale nadal nie potrafie przerobić poprawnie skryptu, aby optymalizował grafike.

P.S.
Proszę niech ktoś mi pomoże bo naprawdę tego skryptu bardzo potrzebuje, a za dobrze nie znam php.
LonelyKnight
W takim razie jeszcze Ci podpowiem ale gotowca pisał nie będę. Może ktoś inny...

Przydadzą Ci się takie funkcje jak:

1. imagecreateformjpg - http://pl2.php.net/manual/pl/function.imag...atefromjpeg.php
2. imagecreatetruecolor - http://pl2.php.net/manual/pl/function.imag...tetruecolor.php
3. imagecopyresampled - http://pl2.php.net/manual/pl/function.imagecopyresampled.php

Poza tym poszukaj na forum bo na pewno było. Jak będziesz miał jakiś konkretny problem to pisz, na pewno ktoś pomoże, a nie prosisz o całość, bo jej zazwyczaj nikt nie dostaje smile.gif
Gordon1x
  1. <?php
  2. $sql_grafika = "SELECT * FROM galeria WHERE id = '$pathsimg' LIMIT 1";
  3. $result_grafika = mysql_query($sql_grafika);
  4. $row_grafika = mysql_fetch_assoc($result_grafika);
  5.  
  6. $obrazek = $row_grafika['obrazek'];
  7. $typ_pliku = $row_grafika['obrazek_mime'];
  8. $nazwa_pliku = $row_grafika['obrazek_name'];
  9. $rozmiar_pliku = $row_grafika['obrazek_size'];
  10.  
  11. $filename = 'images/obrazy/5.jpg';
  12.  
  13. list($width, $height) = getimagesize($filename);
  14.  
  15. $xsize = "161";
  16. $ysize = "120";
  17.  
  18. $image_p = imagecreatetruecolor($galeria[xsize], $galeria[ysize]);
  19. $image = imagecreatefromjpeg($filename);
  20. imagecopyresampled($image_p, $image, 0, 0, 0, 0, $galeria[xsize], $galeria[ysize], $width, $height);
  21.  
  22. imagejpeg($image_p, null, 90);
  23. ?>


W jaki sposób przerobić ten skrypt, aby zmniejszał i optymalizował obraz ze zmiennej $obrazek.
Bo jak otwieram obraz z pliku to skrypt działa poprawnie ($filename = 'images/obrazy/5.jpg';).
abc667
  1. <?php
  2. $filename = 'images/obrazy/' . $row_grafika['obrazek_name'];
  3. ?>

? :-)
Gordon1x
Cytat(abc667 @ 13.06.2007, 18:36:04 ) *
  1. <?php
  2. $filename = 'images/obrazy/' . $row_grafika['obrazek_name'];
  3. ?>

? :-)


Obrazek nie znajduje się w katalogu, lecz tylko w bazie danych. Podałem przykład do którego doszedłem i spawdziłem że działa.

A mój problem polega na tym że niewiem jak zrobić aby zmniejszył i zoptymalizował obrazek z bazy danych.
emacieka
na poczatku tworzysz plik tymczasowy ktorego zawartoscia sa dane obrazka z bazy danych i na nim operujesz, a na koncu usuwasz go.

wykorzystywanie funkcji: tmpfile" title="Zobacz w manualu PHP" target="_manual/tempnam" title="Zobacz w manualu PHP" target="_manual, file_put_contents" title="Zobacz w manualu PHP" target="_manual, unlink" title="Zobacz w manualu PHP" target="_manual
Gordon1x
Cytat(emacieka @ 13.06.2007, 19:59:17 ) *
na poczatku tworzysz plik tymczasowy ktorego zawartoscia sa dane obrazka z bazy danych i na nim operujesz, a na koncu usuwasz go.

wykorzystywanie funkcji: tmpfile" title="Zobacz w manualu PHP" target="_manual/tempnam" title="Zobacz w manualu PHP" target="_manual, file_put_contents" title="Zobacz w manualu PHP" target="_manual, unlink" title="Zobacz w manualu PHP" target="_manual


  1. <?php
  2. $obrazek = $row_grafika['obrazek'];
  3. $typ_pliku = $row_grafika['obrazek_mime'];
  4. $nazwa_pliku = $row_grafika['obrazek_name'];
  5. $rozmiar_pliku = $row_grafika['obrazek_size'];
  6. ?>


Jak tyle danych zapisac to pliku temp. I w jaki sposób odczytać plik tymczasowy.

Prubowałem i nic mi z tego nie wyszło.

Proszę niech ktoś poprawi ten skrypt, bo ja naprawdę niewiem jak to zrobić.
emacieka
Pisane na szybko wiec daj znac jak cos nie dziala:
  1. <?php
  2. $obrazek = $row_grafika['obrazek'];
  3. $typ_pliku = $row_grafika['obrazek_mime'];
  4. $nazwa_pliku = $row_grafika['obrazek_name'];
  5. $rozmiar_pliku = $row_grafika['obrazek_size'];
  6.  
  7.  
  8. $filename = tempnam( '', '' );
  9. file_put_contents( $filename, $obrazek );
  10.  
  11. list($width, $height) = getimagesize($filename);
  12.  
  13. $xsize = 161;
  14. $ysize = 120;
  15.  
  16. $image_p = imagecreatetruecolor($galeria[xsize], $galeria[ysize]);
  17. $image = imagecreatefromjpeg($filename);
  18. imagecopyresampled($image_p, $image, 0, 0, 0, 0, $galeria[xsize], $galeria[ysize], $width, $height);
  19.  
  20. unlink($filename);
  21.  
  22. // Jeśli chcesz znać rozmiar nowego obrazka
  23. imagejpeg($image_p, null, 90);
  24. $image_data = ob_get_contents();
  25. $file_size = strlen( $image_data );
  26.  
  27. header('Content-type: ' . $typ_pliku);
  28. header('Content-lenght:' . $file_size);
  29. header('Content-Disposition: attachment; filename = ' . $nazwa_pliku);
  30. echo $image_data;
  31. ?>
Gordon1x
Skrypt nie wyświetla obrazków więc jest błąd.

Jak adres do pliku wpisze ręcznie, czyli 127.0.0.1/~strona/obraz.php?pathsimg=2 to wyświetla błąd.

Fatal error: Call to undefined function: file_put_contents() in c:\usr\krasnal\www\strona\obraz.php on line 20


Normalnie to strona się odwołuje do obrazków przez:
  1. <img src="obraz.php?pathsimg=$id">
  2. $id - numer obrazka w bazie.
emacieka
Niech zgadne: php4?
Cytanie manuala nie boli:
  1. <?php
  2. define('FILE_APPEND', 1);
  3. function file_put_contents($n, $d, $flag = false) {
  4. $mode = ($flag == FILE_APPEND || strtoupper($flag) == 'FILE_APPEND') ? 'a' : 'w';
  5. $f = @fopen($n, $mode);
  6. if ($f === false) {
  7. return 0;
  8. } else {
  9. if (is_array($d)) $d = implode($d);
  10. $bytes_written = fwrite($f, $d);
  11. fclose($f);
  12. return $bytes_written;
  13. }
  14. }
  15. ?>
Gordon1x
Wielkie dzięki za pomoc.

Niestety skrypt nie wyświetla obrazków w Internet Explorer.
Czy ktoś może rozwiązać ten problem.

  1. <?php
  2.  
  3. define('FILE_APPEND', 1);
  4.  
  5. include("configs/conf.php");
  6.  
  7. mysql_pconnect ("$mysql[host]", "$mysql[login]", "$mysql[pass]") or
  8.  die ("Nie można połączyć się z bazą danych");
  9. mysql_select_db ("$mysql[baza]") or
  10.  die ("Nie można połączyć się z bazą danych");
  11.  
  12. $sql_grafika = "SELECT * FROM galeria WHERE id = '$pathimg' LIMIT 1";
  13. $result_grafika = mysql_query($sql_grafika);
  14. $row_grafika = mysql_fetch_assoc($result_grafika);
  15.  
  16. $obrazek = $row_grafika['obrazek'];
  17. $typ_pliku = $row_grafika['obrazek_mime'];
  18. $nazwa_pliku = $row_grafika['obrazek_name'];
  19. $rozmiar_pliku = $row_grafika['obrazek_size'];
  20.  
  21. function file_put_contents($n, $d, $flag = false){
  22.  $mode = ($flag == FILE_APPEND || strtoupper($flag) == 'FILE_APPEND') ? 'a' : 'w';
  23.  $f = @fopen($n, $mode);
  24.  if ($f === false){
  25. return 0;
  26.  }
  27.  else {
  28. if (is_array($d)) $d = implode($d);
  29.  $bytes_written = fwrite($f, $d);
  30.  fclose($f);
  31.  return $bytes_written;
  32. }
  33. }
  34.  
  35. $filename = tempnam('', '');
  36. file_put_contents($filename, $obrazek);
  37.  
  38. list($width, $height) = getimagesize($filename);
  39.  
  40. $image_p = imagecreatetruecolor($xsize, $ysize);
  41. $image = imagecreatefromjpeg($filename);
  42. imagecopyresampled($image_p, $image, 0, 0, 0, 0, $xsize, $ysize, $width, $height);
  43.  
  44. unlink($filename);
  45.  
  46. // Jeśli chcesz znać rozmiar nowego obrazka
  47.  
  48.  imagejpeg($image_p, null, $quality);
  49.  $image_data = ob_get_contents();
  50.  
  51. $file_size = strlen($image_data);
  52.  
  53. header("Content-type: $typ_pliku");
  54. header("Content-lenght: $file_size");
  55. header("Content-Disposition: attachment; filename = $nazwa_pliku");
  56. print ("$image_data");
  57.  
  58. ?>
emacieka
Wiersz 56: header("Content-lenght: $file_size");
powinno być: header("Content-length: $file_size");

mała literówka Rkingsmiley.png
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.