Avatar billede darkside Nybegynder
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?
Avatar billede leif Seniormester
11. august 2005 - 08:43 #1
Hvad med at resize billedet når billedet bliver uploadet ?
Avatar billede darkside Nybegynder
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
Avatar billede leif Seniormester
11. august 2005 - 08:47 #3
Dvs. at billederne kan ligge på en anden server ?
Avatar billede darkside Nybegynder
11. august 2005 - 08:49 #4
Yeps :)

Det er der hele problemet ligger :)
Avatar billede leif Seniormester
11. august 2005 - 08:54 #5
Kan du ikke <img height="20" src="http://server.dk/billede.jpg"> (Justerer den så ikke selv bredden ind ?)
Avatar billede darkside Nybegynder
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
Avatar billede leif Seniormester
11. august 2005 - 09:00 #7
I hvad forbindelse er det ?

Umiddelbart er der ikke nogen nem løsning på det !
Avatar billede darkside Nybegynder
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
Avatar billede acid-head Nybegynder
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.. :)
Avatar billede darkside Nybegynder
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?
Avatar billede jaw Nybegynder
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.
Avatar billede jaw Nybegynder
11. august 2005 - 10:12 #12
Hov, skulle lige læse ordentligt, så det er åbenbart ikke en løsning :) Beklager !
Avatar billede darkside Nybegynder
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.
Avatar billede darkside Nybegynder
11. august 2005 - 10:14 #14
Hehe det er så okay :)

andre forslag modtages gerne
Avatar billede jaw Nybegynder
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> !
Avatar billede darkside Nybegynder
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
Avatar billede darkside Nybegynder
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.
Avatar billede jaw Nybegynder
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 />";
Avatar billede darkside Nybegynder
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.
Avatar billede jaw Nybegynder
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.
Avatar billede darkside Nybegynder
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.
Avatar billede jaw Nybegynder
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 :)
Avatar billede jaw Nybegynder
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'>");
}
Avatar billede darkside Nybegynder
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);
Avatar billede jaw Nybegynder
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.
Avatar billede darkside Nybegynder
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'>");
}
Avatar billede darkside Nybegynder
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'>");
}
Avatar billede jaw Nybegynder
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 :)
Avatar billede darkside Nybegynder
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
Avatar billede darkside Nybegynder
11. august 2005 - 11:04 #30
Det ser ud som om den leder efter filen på selve serveren istedet for at tjekke linket.
Avatar billede jaw Nybegynder
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.
Avatar billede darkside Nybegynder
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'>");
}
Avatar billede jaw Nybegynder
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]);

}
Avatar billede darkside Nybegynder
11. august 2005 - 12:13 #34
Men følgende kode:
<?
$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); $i++) {

echo $matches[0][$i];     
$imagehw = GetImageSize($matches[0][$i]);

}
?>

Får jeg denne fejl:
http://www.wildhorsepreservation.com/images/flat_horse.jpg
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/image.php on line 8

Jaw har du evt msn eller icq, så kan vi diskutere der hvis det er ? :)
Avatar billede jaw Nybegynder
11. august 2005 - 12:15 #35
IRC #tele2gaming @ Quakenet. Tror jeg ved fejlen, skal bare lige have den fikset...
Avatar billede darkside Nybegynder
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 :)
Avatar billede jaw Nybegynder
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...
Avatar billede darkside Nybegynder
11. august 2005 - 15:05 #38
Du har fortjent de point, du fik mit i den rigtige retning :)
Avatar billede jaw Nybegynder
11. august 2005 - 15:06 #39
Så siger jeg mange, mange tak :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester