[PHP] Zapis obrazka z bazy do pliku


(Filip) #1

Witam,

Mam w bazie danych obrazki w polach BLOB i potrzebuje zapisać te obrazki do plików przez PHP. Jak to zrobić? Wiem, że są to albo bitmapy albo jpegi. Próbowałem normalnym zapisem do pliku i nie działa, tzn. zapisują się, ale nie da się ich wyświetlić (plik zniszczony, uszkodzony lub za duży).

$rys = $row['rysunek'];

		$plik = "./pics/$id.jpeg";

		if(!file_exists($plik))

        {

			$uchwyt = fopen($plik, 'w+b');

			fwrite($uchwyt, '');

			fwrite($uchwyt, $rys);

			fclose($uchwyt);

			unset($rys);

		}

(mozilla007) #2

Użyj biblioteki GD, może pomoże. U mnie po wyświetlaniu pliku graficznego i zapisaniu działał poprawnie. Odnośnie tematu to kto dziś trzyma pliki w bazie SQL ?


(Filip) #3

No to akurat nie jest moja baza. Możesz podpowiedzieć jak mam tej biblioteki użyć?


(Copycona) #4

Jak wygląda ciąg znaków z tym obrazem? Jak się rozpoczyna? Może to być:

  • BM dla plików BMP (hex: 42 4D)

  • .PNG (hex: 89 50 4E 47)

i wtedy powinno działać już w ten sposób, jak pokazałeś, o ile obrazek został do bazy poprawnie zapisany.

Może być też to string będący wynikiem kodowania przy użyciu base64. Wtedy najpierw trzeba użyć base64_decode.

Z biblioteki GD interesuje Cię, na dobry początek, funkcja _imagecreatefromstring()_. Podany na podlinkowanej stronie przykład wyświetla dany obrazek, aby go zapisać do pliku musisz do _imagepng()_/_imagejpeg()_ dopisać drugi parametr z jego nazwą.


(Filip) #5

Ok, teraz jestem pewien, że są to bitmapy. Po wyświetleniu pojedynczego obrazka, tzn kodu wyświetla mi

6(Obraz - mapa bitowaPaint.PicturePBrush`dBMJd6(Qida

Nie wygląda to ani na zakodowane, ani na string, z resztą próbowałem z tym from string i z dekodowaniem i wciąż ten sam problem. Obrazki zostały dobrze zapisane, bo są używane w aplikacji napisanej w Accessie, który wykorzystuje właśnie mysqla oraz są próby przeniesienia tej aplikacji na Visual Basica i tam z tego co wiem też działają.

EDIT: Dodam, że rozmiary "obrazków", które się tworzą na ftpie zgadzają się z tymi, które są w bazie.


(Copycona) #6
  1. Mi to nie wygląda na typowe bitmapy, nie pasuje do tego: wiki en BMP_file_format, wiki pl Windows_Bitmap

  2. Może spróbuj to otworzyć przy użyciu jakieś przeglądarki graficznej, np. XnView.

  3. To co wkleiłeś się średnio nadaje, trudno coś kombinować na podstawie tego. Mógłbyś podzielić się takim przykładowym "obrazkiem", wrzucić na dowolny hosting plików? Być może nie wszystkie bajty zapisane w bazie są obrazkiem, a na przykład jakimiś danymi, które trzeba pominąć, a są potrzebne do czegoś innego.

  4. Ewentualnie mógłbyś sprawdzić/podać jak ten obrazek, w tej aplikacji która już jest i działa, jest pobierany i wyświetlany.

  5. Z takich pomysłów, które mam jeszcze to może w czasie odczytu używane jest inne kodowanie, niż jest baza?


(Filip) #7

Obrazek

W sumie temat można uznać za zamknięty, bo uzyskałem te obrazki w normalnej plikowej postaci.


(Copycona) #8

To mógłbyś napisać o co chodziło ...


(Filip) #9

Mógłbym, gdybym wiedział. Dostałem po prostu obrazki spoza bazy.