Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: obrazki do danej wielkosci
Forum PHP.pl > Forum > PHP
dopy
Witam,

Jak w kodzie html "odgrzebac" linki do wszystkich obrazkow do danej wielkosci ? tzn mam kod html, w nich rysunki <img> z podanymi parametrami width i height, i chcialbym funkcja w php wyciagac url'e do obrazkow, ktorych wysokosc i szerokosc nie przekracza danych przekazanych w zmiennej.

Z gory dziekuje za pomoc
Pozdrawiam.
em1X
Cóż.. lepsze to niz nic tongue.gif

  1. <?php
  2. /* **
  3. * Pobiera obrazki z kodu html, przefiltrowane
  4. * ze wzgledu na rozmiar.
  5. *
  6. * @author em1x
  7. *
  8. * @param string $url Adres strony
  9. * @param int $maxWidth Maksymalna szerokosc obrazka
  10. * @param int $maxHeight Maksymalna wysokosc obrazka
  11. * @return array[] Zaakceptowane obrazki
  12. * **/
  13. function getImages($url, $maxWidth, $maxHeight)
  14. {
  15. $fp = fopen($url, 'r');
  16.  
  17. $return = array();
  18. $img = array();
  19.  
  20. while (!feof($fp)) {
  21. $code = fgets($fp, 2048);
  22.  
  23. $tab = explode('<img ', $code);
  24.  
  25. for ($i=0; $i<sizeof($tab); $i++)
  26. {
  27.  $im =& $tab[$i];
  28.  
  29. if (substr($im, 0, 3) == "src")
  30. {
  31. $im = strtr($im, array('"'=>'*', "'"=>'*'));
  32.  
  33. $temp = explode('src=*', $im);
  34. $temp = substr($temp[1], 0, strpos($temp[1], '*'));
  35. $img['src'] = $temp;
  36.  
  37. $temp = explode('width=*', $im);
  38. $temp = intval(substr($temp[1], 0, strpos($temp[1], '*')));
  39. $img['width'] = $temp;
  40.  
  41. $temp = explode('height=*', $im);
  42. $temp = intval(substr($temp[1], 0, strpos($temp[1], '*')));
  43. $img['height'] = $temp;
  44.  
  45. if ($img['width'] <= $maxWidth && $img['height'] <= $maxHeight && !empty($img['src']))
  46. $return[] = $img['src'];
  47.  
  48. unset($img);
  49. }
  50. }}
  51.  
  52. fclose($fp);
  53. return $return;
  54. }
  55. ?>
dopy
O potestuje zaraz ten kodzik, moze bedzie dzialal szybciej niz moj programistyczny wywod smile.gif Niebawem napisze recenzje, tak czy owak dziekuje serdecznie smile.gif
em1X
Trochę uaktualniłem kodzik, wiec jak podasz mu:

  1. <?php
  2. echo "<pre>";
  3. print_r(getImages('http://onet.pl', 200, 300));
  4. echo "</pre>";
  5. ?>


To wyświetla niezłą listę obrazków z onetu smile.gifsmile.gif Pomimo tej ich sałatki wyplutej przez cmsa.
dopy
  1. <?php
  2. function is_url($url)
  3. {
  4. return (bool)preg_match(';^http://[a-z0-9-]+.([a-z0-9-]+.)?[a-z]+;i', $url);
  5. }
  6.  
  7. if($_POST[work]=="tak")
  8. {
  9. $adres=$_POST['url'];
  10. $wysokosc=$_POST['wys'];
  11. $szerokosc=$_POST['sze'];
  12.  
  13. $kod=file_get_contents($url);
  14.  
  15. preg_match_all( '/<img[^>]+>/i', $kod, $wynik );
  16. $ilosc=count($wynik[0]);
  17. $linki=array();
  18.  
  19. for($i=0; $i<=$ilosc-1; $i++)
  20. {
  21. $dane = explode ('"', $wynik[0][$i]);  
  22. foreach ($dane as $item) {
  23. if(is_url($item)) {
  24. echo " ";
  25. $rozmiary=getimagesize($item);
  26. if(($rozmiary[0]>=80) && ($rozmiary[1]>=80) && ($rozmiary[0]<=$szerokosc) && ($rozmiary[1]<=$wysokosc)) $linki[]=$item;
  27. }
  28. }
  29. }
  30.  
  31. echo "<br><textarea rows=20 cols=40 style='font-size:10px; font-family: verdana;'>";
  32. echo implode("n", $linki);
  33. echo "</textarea>";
  34. }
  35. ?>


Tak wyglada moja radosna tworczosc smile.gif Wiem - bardzo brzydki kod - ale pisane na szybko byle działało smile.gif Za jakiś czas go "posprzątam" smile.gif Ten kodzik pobiera rozmiary obrazka z jego naglowkow, a nie z kodu - ale wada jest dosc dlugie dzialanie smile.gif Tak czy owak o ile nie uda mi sie usprawnic mojego kodu to skorzystam z Twojego smile.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.