11. august 2005 - 08:37
Der er
38 kommentarer og 1 løsning
Resize Billeder
Davs
Jeg sidder her med et problem jeg ikke lige har en ide om hvordan skal løses.
Sidder og roder med et forum, og der er mulighed for at sætte billeder ind via <picture>
http://server.dk/billede.jpg</picture> det ryger så i db'en og trækkes ud sammen med teksten i indlæget.
når det så bliver trukket ud bliver det kørt igennem en srt_replace og lavet om til <img src="
http://server.dk/billede.jpg"> Men problemet er hvordan pokker for jeg det resized så det ikke kommer til at se dumt ud ?
Man kan jo sætte height og width, men det er ikke en holdbar løsning, da der kan være meget stor forskel på det billede der bliver sat ind.
overvejede selv GetImageSize men den er ikke en mulighed da jeg ikke decideret har billedet i en streng for sig selv.
Nogen gode forslag?
Annonceindlæg fra Computerworld
11. august 2005 - 08:43
#1
Hvad med at resize billedet når billedet bliver uploadet ?
11. august 2005 - 08:45
#2
Ikke en mulighed, skulle jeg nok ha haft skrevet Billederne kan jo blive linket fra en helt anden side hvor jeg ikke har kontrol over dem
11. august 2005 - 08:47
#3
Dvs. at billederne kan ligge på en anden server ?
11. august 2005 - 08:49
#4
Yeps :) Det er der hele problemet ligger :)
11. august 2005 - 08:56
#6
Jo, men så bliver billeder jo meget småt, det er desværre heller ikke meningen Det jeg er ude efter er noget der kan resize billederne så de beholder deres form uden at blive deform hvis du forstår ? Eks et billede der er 20 px width, det er jo noget hat hvis det bliver 200px width
11. august 2005 - 09:00
#7
I hvad forbindelse er det ? Umiddelbart er der ikke nogen nem løsning på det !
11. august 2005 - 09:02
#8
Det er som jeg skrev i forbindelse med et forum. Og grunden til at billederne skal resizes er så de ikke smadrer mit design :) Dvs jeg skal bruge et eller andet som dynamisk kan resize mine billeder så de beholder deres form
11. august 2005 - 09:47
#9
Kunne du ikke lave en løsning, hvor du henter de billeder over på serveren, som der bliver skrevet mellem <picture> og </picture> ? Derefter kan du jo resize dem, med nogle GD funktioner.. :)
11. august 2005 - 09:49
#10
Det er en mulighed jo, men det kommer til at fylde voldsomt på serveren og æde en pokkers masse trafik. Andre forslag?
11. august 2005 - 10:11
#11
Kig på getimagesize() -
www.php.net/getimagesize Den kan løs det, hvis jeg forstår dig rigtigt. Så bestem dig for en fast bredde eller højde, og beregn den "ukendte" størrelse udfra billedets originale højde/bredde og forholdet til den nye bredde/højde.
11. august 2005 - 10:12
#12
Hov, skulle lige læse ordentligt, så det er åbenbart ikke en løsning :) Beklager !
11. august 2005 - 10:13
#13
jaw, læste du ikke hvad jeg skrev ? getimagesize er ikke en mulighed for jeg ikke decideret har en streng hvor linket til billedet ligger.
11. august 2005 - 10:14
#14
Hehe det er så okay :) andre forslag modtages gerne
11. august 2005 - 10:16
#15
Men hvorfor siger du, at du ikke har en streng med billedet? Hvis du har en streng med: <picture>
http://server.dk/billede.jpg</picture> , så er det jo bare at fjerne <picture></picture> !
11. august 2005 - 10:18
#16
jaw det er i midten af en masse andet tekst. Jeg kan ikke begynde at pille det fra hinanden. Det skal jo helst hænge rigtigt sammen når det bliver udskrevet
11. august 2005 - 10:21
#17
Et eks er sådan her:
$streng = "dasdsa das dsa das gwsrt efsadf ads <picture>
http://server.dk/billede.jpg</picture> dfasd dsa dsa ds dsa das edc osv";
Jeg kan jo ikke bare pille billedet ud, det skal jo sidde det samme sted når der udskrives, + der er mulighed for at der er mere en et billede pr indlæg.
11. august 2005 - 10:32
#18
Jeg er godt nok ikke en haj til regulære udtryk, men den her kan jeg da få til at funke så du nu har et array kun indeholdende dine adresser:
$tekst = "hskajaksfhd <picture>
http://www.test.dk</picture> askjgh <picture>
http://www.a.dk</picture> amhsdgf addd";
preg_match_all("|\<picture>(.+)</picture>|U", $tekst, $matches);
echo $matches[0][0]."<br />";
echo $matches[0][1]."<br />";
11. august 2005 - 10:34
#19
Hm ja, men hvad så når det hele skal sættes sammen igen ? Billederne skal jo helst blive hvor de blev sat ind.
11. august 2005 - 10:35
#20
Du fjerner dem jo ikke fra teksten, du henter bare en "kopi" af det. $tekst indeholder jo stadig hvad det hele tiden har indeholdt. Altså, du kan med $matches beregne deres nye størrelser som tidligere beskrevet. Så kan du bagefter køre din str_replace og indsætte <img>-tagget med de nye størrelser angivet.
11. august 2005 - 10:37
#21
Hm det lyder jo fint nok, dog lige et spm..kan se du bruger echo 2 gange til at vise hvad array indholder, hvad så hvis der er 8 billeder eks ? Kan jo ikke ha 8 x echo.
11. august 2005 - 10:41
#22
hvorfor kan du ikke det? Og som sådan skal du jo ikke echo'e dem, men køre dine beregner. Et lille eksempel, som måske kan simplificeres, men som jeg tror du mener det:
$tekst = "hskajaksfhd <picture>
http://www.test.dk</picture> askjgh <picture>
http://www.a.dk</picture> amhsdgf addd";
preg_match_all("|\<picture>(.+)</picture>|U", $tekst, $matches);
for($i = 0; $i < count($matches); $i++) {
//beregning med getimagesize(); på $matches[0][$i]
$tekst = str_replace("<picture>".$matches[0][$i]."</picture>", "<img src='".$matches[0][$i]."' width='$bredde' height='$hoejde'>");
}
Sådan ca. i hvert fald :)
11. august 2005 - 10:43
#23
Og der er vist ingen grund til at bruge preg_match_all nu hvor jeg kigger efter, preg_match klarer vist det samme:
$tekst = "hskajaksfhd <picture>
http://www.test.dk</picture> askjgh <picture>
http://www.a.dk</picture> amhsdgf addd";
preg_match("|\<picture>(.+)</picture>|U", $tekst, $matches);
for($i = 0; $i < count($matches); $i++) {
//beregning med getimagesize(); på $matches[$i]
$tekst = str_replace("<picture>".$matches[$i]."</picture>", "<img src='".$matches[$i]."' width='$bredde' height='$hoejde'>");
}
11. august 2005 - 10:44
#24
Jaw Hvordan vil du lige sætte det ind sammen med følgende? $indlaeg = str_replace("<picture>", "<img src=\"", $indlaeg); $indlaeg = str_replace("</picture>", "\">", $indlaeg);
11. august 2005 - 10:46
#25
Nej, du skal vist holde dig til mit første forsøg kl 10.43.59 med _all :) Og det vil jeg klare som jeg har angivet i mit eksempel. Hvis ikke du tager dem een ad gangen vil du jo ikke få de korrekt størrelser på de korrekte billeder.
11. august 2005 - 10:52
#26
Dvs jeg skal holde mig til denne her?
$tekst = "hskajaksfhd <picture>
http://www.test.dk</picture> askjgh <picture>
http://www.a.dk</picture> amhsdgf addd";
preg_match_all("|\<picture>(.+)</picture>|U", $tekst, $matches);
for($i = 0; $i < count($matches); $i++) {
//beregning med getimagesize(); på $matches[0][$i]
$tekst = str_replace("<picture>".$matches[0][$i]."</picture>", "<img src='".$matches[0][$i]."' width='$bredde' height='$hoejde'>");
}
11. august 2005 - 10:55
#27
Så burde dette her vel virke ? $indlaeg = $row[indlaeg]; preg_match_all("|\<picture>(.+)</picture>|U", $indlaeg, $matches); for($i = 0; $i < count($matches); $i++) { $imagehw = GetImageSize($matches[0][$i]); $new_w = '400'; $division = $imagehw[0] / $new_w; $new_h = $imagehw[1] / $division; //beregning med getimagesize(); på $matches[0][$i] $indlaeg = str_replace("<picture>".$matches[0][$i]."</picture>", "<img src='".$matches[0][$i]."' width='$new_w' height='$new_h'>"); }
11. august 2005 - 10:58
#28
Tjah, tjoh, tror det er nemmere at teste det, end at forlange at jeg skal kunne overskue alt outputtet fra det :)
11. august 2005 - 10:59
#29
Hehe
Tja det giver denne her stak fejl.
Warning: getimagesize(
http://www.wildhorsepreservation.com/images/flat_horse.jpg ): failed to open stream: No such file or directory in /var/www/localhost/htdocs/heste/Ny Side/vis.php on line 256
Warning: Division by zero in /var/www/localhost/htdocs/heste/Ny Side/vis.php on line 260
Warning: Wrong parameter count for str_replace() in /var/www/localhost/htdocs/heste/Ny Side/vis.php on line 262
Warning: Division by zero in /var/www/localhost/htdocs/heste/Ny Side/vis.php on line 260
Warning: Wrong parameter count for str_replace() in /var/www/localhost/htdocs/heste/Ny Side/vis.php on line 262
11. august 2005 - 11:04
#30
Det ser ud som om den leder efter filen på selve serveren istedet for at tjekke linket.
11. august 2005 - 12:04
#31
Tjah, hos mig virker det. Måske der er noget secure server eller noget hos din host der forhindrer at det virker. Men prøv at lave en blank fil med:
<?
$img = getimagesize("
http://www.wildhorsepreservation.com/images/flat_horse.jpg" );
echo $img[0];
?>
Det giver mig outputtet 250.
11. august 2005 - 12:07
#32
Den giver det samme her.. virker følgende ved dig? $indlaeg = $row[indlaeg]; preg_match_all("|\<picture>(.+)</picture>|U", $indlaeg, $matches); for($i = 0; $i < count($matches); $i++) { $imagehw = GetImageSize($matches[0][$i]); $new_w = '400'; $division = $imagehw[0] / $new_w; $new_h = $imagehw[1] / $division; //beregning med getimagesize(); på $matches[0][$i] $indlaeg = str_replace("<picture>".$matches[0][$i]."</picture>", "<img src='".$matches[0][$i]."' width='$new_w' height='$new_h'>"); }
11. august 2005 - 12:10
#33
Jeg har ikke testet det hele, for for det første har jeg ikke din $indlaeg. Så må vi prøve at tage det i skridt: $indlaeg = $row[indlaeg]; preg_match_all("|\<picture>(.+)</picture>|U", $indlaeg, $matches); for($i = 0; $i < count($matches); $i++) { echo $matches[0][$i]; $imagehw = GetImageSize($matches[0][$i]); }
11. august 2005 - 12:15
#35
IRC #tele2gaming @ Quakenet. Tror jeg ved fejlen, skal bare lige have den fikset...
11. august 2005 - 14:56
#36
<?
$indlaeg = "<picture>
http://www.wildhorsepreservation.com/images/flat_horse.jpg</picture>"; preg_match_all("|\<picture>(.+)</picture>|U", $indlaeg, $matches);
for($i = 0; $i < count($matches[1]); $i++) {
$image = $matches[1][$i];
$size = getimagesize($image);
$height = $size[1];
$width = $size[0];
if ($height > 300)
{
$height = 150;
$percent = ($size[1] / $height);
$width = ($size[0] / $percent);
}
else if ($width > 300)
{
$width = 150;
$percent = ($size[0] / $width);
$height = ($size[1] / $percent);
}
$indlaeg = str_replace($matches[0][$i], "<img src='".$matches[1][$i]."' width='$width' height='$height'>", $indlaeg);
}
?>
Sådan kom den færdige kode til at se ud :)
11. august 2005 - 15:01
#37
Yes, du har rettet et par småting, og jeg havde ikke luret at [0] skulle være [1] :) Tillader mig at kaste et svar...
11. august 2005 - 15:05
#38
Du har fortjent de point, du fik mit i den rigtige retning :)
11. august 2005 - 15:06
#39
Så siger jeg mange, mange tak :)
Vi tilbyder markedets bedste kurser inden for webudvikling