Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak zmniejszyć zdalny obrazek zachowując proporcje wy*sz ?
Forum PHP.pl > Forum > PHP
xPatryk
Witam !

Mam problem...

Zrobiłem Bazę Ośrodków Jeździeckich i chcę, aby użytkownicy mogli dodawać zdjęcia (adres do zdjęć zdalnych...) Problem jest w tym, ze jezeli beda za duze, to wszsytko sie rozsypie...

Jeżeli natomiast zastosuję stałe znaczniki height i width, to zdjęcie będzie zniekształcone...

Potrzebuję zastosować coś, co zmniejszy obrazek, jeśli będzie większ niż 300 x 200...

Jak to zrobic ?

Pozdrawiam

Patryk
co_jest.gif
Paul
zapoznaj się z http://www.php.net/image

chodzi oto, ze robisz ifa >> jezeli obrazek jest wiekszy >> to zmieszasz go >> i wypluwasz do przegladarki >> i nie bawisz sie w zadne htmlowe syfy typu width i height......

i adres takiego obrazka wyglada wtedy tak np. "obrazek.php?url=http://jakistamobazek.pl/img.jpg"

A zeby zachowac oryginalne proporcje wymiarow to zmnieszajac go wylicz sobie ile procent wymiarow danego obrazka stanowi jeden z wymiarow np. szerokosc 300 i pomnoz drugi, pozostaly wymiar np. wysokosc przez ten wyliczony wczesniej wynik. Dzieki temu obrazek bedzie nie rozciagniety.
xPatryk
Hmmm...
Chyba nie bardzo zrozumiałem...
Przeczytałem mniej/więcej manual, ale moja znajomość angielskiego nie jest najlepsza sad.gif

Czy można prosić o troche dokladniejszy opis ?

Będę bardzo wdzięczny

Pozdrawiam

Patryk
:wink:

(przykład. http://www.qnwortal.com/modules.php?name=p...azosrodek&id=56 )
id4
Witam

Już miałem zacząć tłumaczyć Ci sposób na rozwiązanie tego problemu, ale byłoby tego dużo - a nie bardzo mam czas. Poniżej podaję Ci kod, który kiedyś wykorzystywałem - może Ci się przydać:
[php:1:e5929678d2]<?php
/*
generowanie miniatur
-------------------------
$photo="nazwa_pliku";
$rotate=1; - orientacja pionowa (2) lub pozioma (1)
$size=300; - max. szerokość i wysokość zdjecia
$var_photosfolder="photos/"; - katalog z fotkami
*/
$photo=$var_photosfolder.$photo;
$photosize=getimagesize($photo);
if($photosize[2]==1)$photofile=imagecreatefromgif($photo);
if($photosize[2]==2)$photofile=imagecreatefromjpeg($photo);
if($photosize[2]==3)$photofile=imagecreatefrompng($photo);
if($rotate==1){
$photoX=round($size/$photosize[0],10);
$newimagesize[0]=$size;
$newimagesize[1]=ceil($photosize[1]*$photoX);
}
if($rotate==2){
$photoX=round($size/$photosize[1],10);
$newimagesize[0]=ceil($photosize[0]*$photoX);
$newimagesize[1]=$size;
}
$newimage=imagecreatetruecolor($newimagesize[0],$newimagesize[1]);
imagecopyresampled($newimage,$photofile,0,0,0,0,$newimagesize[0],$newimagesize[1
,$photosize[0],$photosize[1]);
header("Content-type: image/jpeg");
imagejpeg($newimage);
imagedestroy($newimage);
?>[/php:1:e5929678d2]
Mam nadzieję, że ten kod Ci się przyda - zmodyfikuj go trochę a będzie na pewno przydatny. Ja miałem z tego zrobioną funkcję.
maciu
oto moje rozwiązanie pochodzące z książki php i MySql vademecum profesjonalisty
[php:1:c06375d51b]<?php
if (!$max_szerokosc)
$max_szerokosc = 160;
if (!$max_wysokosc)
$max_wysokosc = 220;

$rozmiar = GetImageSize($zdjecie);
$szerokosc = $rozmiar[0];
$wysokosc = $rozmiar[1];

$wspolczynnik_x = $max_szerokosc / $szerokosc;
$wspolczynnik_y = $max_wysokosc / $wysokosc;

if ( ($szerokosc <= $max_szerokosc) && ($wysokosc <= $max_wysokosc) )
{
$nowa_szerokosc = $szerokosc;
$nowa_wysokosc = $wysokosc;
}
else if (($wspolczynnik_x * $wysokosc) < $max_wysokosc)
{
$nowa_wysokosc = ceil($wspolczynnik_x * $wysokosc);
$nowa_szerokosc = $max_szerokosc;
}
else
{
$nowa_szerokosc = ceil($wspolczynnik_y * $szerokosc);
$nowa_wysokosc = $max_wysokosc;
}

$zrd = ImageCreateFromJpeg($zdjecie);
$prz = ImageCreate($nowa_szerokosc,$nowa_wysokosc);
ImageCopyResized($prz, $zrd, 0, 0, 0, 0,
$nowa_szerokosc,$nowa_wysokosc,$szerokosc,$wysokosc);

?>[/php:1:c06375d51b]
Lucky
Ja proponuję prostszy sposób:

[php:1:0fc45e7d30]<?php
$img = imagecreatefromjpeg($url);
$x = imagesx($img)/100;//docelowa maksymalna szerokosc
$y = imagesy($img)/100;//docelowa maksymalna wysokosc
if($x<=$y) {
$x=imagesx($img)/$y;
$y=imagesy($img)/$y;
} else {
$x=imagesx($img)/$x;
$y=imagesy($img)/$x;
}
$imgMini = imagecreate(abs($x),abs($y));
$img = imagecopyresized($imgMini,$img,0,0,0,0,abs($x),abs($y),imagesx($img),imagesy($im
));
?>[/php:1:0fc45e7d30]
xPatryk
Witam !

Dziękuję za odpowiedź, to pomogło smile.gif)

Mam tylko jeszcze jedno pytanie...

Jak potem taką miniaturkę zapisać do pliku ?

Pozdrawiam

Patryk
id4
Witam

[manual:409c9ccaab]imagejpeg[/manual:409c9ccaab] ma parametry, którymi możesz zapisać plik na dysk.
xPatryk
Witam !

Dodałem do tego skryptu, co podałeś parametr dla ImageJPEG

[php:1:65c1cddfdd]
<?php



// generowanie miniatur
// -------------------------

$rotate=1; // orientacja pionowa (2) lub pozioma (1)
$size=300; // max. szerokość i wysokość zdjecia
$photosize=getimagesize($photo);
if($photosize[2]==1)$photofile=imagecreatefromgif($photo);
if($photosize[2]==2)$photofile=imagecreatefromjpeg($photo);
if($photosize[2]==3)$photofile=imagecreatefrompng($photo);
if($rotate==1){
$photoX=round($size/$photosize[0],10);
$newimagesize[0]=$size;
$newimagesize[1]=ceil($photosize[1]*$photoX);
}
if($rotate==2){
$photoX=round($size/$photosize[1],10);
$newimagesize[0]=ceil($photosize[0]*$photoX);
$newimagesize[1]=$size;
}
$newimage=imagecreatetruecolor($newimagesize[0],$newimagesize[1]);
imagecopyresampled($newimage,$photofile,0,0,0,0,$newimagesize[0],$newimagesize[1
,$photosize[0],$photosize[1]);
header("Content-type: image/jpeg");
imagejpeg($newimage, "test.jpg");


?>[/php:1:65c1cddfdd]

, ale efekt jest taki, ze pojawia sie okienko sciagania pliku zdjecie.jpg i sciaga pusty plik sad.gif

Czy cos zle zrobilem ?

Pozdrawiam Patryk

(parametr photo podalem w adresie)
czachor
może na sam początek[php:1:454a225622]<?
$photo = $_GET['photo'];
?>[/php:1:454a225622]
xPatryk
sad.gif

Raczej nie tu lezy problem... mam włączone Global Registers sad.gif
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.