/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
oscommerce
Fra : Martin


Dato : 10-09-07 18:13

Hej ng

Jeg er ude efter en contribution til oscommerce 2.2

Kravet er, at når man første gang opretter et nyt produkt og uploader et
produktbillede skal den vha gd2 resize ens originale billede til fx. 400 px
bred, så det heller ikke fylder så meget i kb.

Dette 400 px billede skal så vises når der trykkes på "vis stort billede".

Der findes flere, der kan oprette thumbnail bagefter til visning af det
lille produktbillede, men jeg har ikke kunnet finde noget der kan rezise ens
store popup billede.

Nogle der kender en løsning.

Martin



 
 
Martin (10-09-2007)
Kommentar
Fra : Martin


Dato : 10-09-07 21:39

Martin wrote:
> Hej ng
>
> Jeg er ude efter en contribution til oscommerce 2.2
>
> Kravet er, at når man første gang opretter et nyt produkt og uploader et
> produktbillede skal den vha gd2 resize ens originale billede til fx. 400 px
> bred, så det heller ikke fylder så meget i kb.
>
> Dette 400 px billede skal så vises når der trykkes på "vis stort billede".
>
> Der findes flere, der kan oprette thumbnail bagefter til visning af det
> lille produktbillede, men jeg har ikke kunnet finde noget der kan rezise ens
> store popup billede.

Så byg thumbnail dimsen om - om et billede skal være 100000px eller 5px
er faktisk fuldstændig samme funktion - den eneste forskel er såmænd
bare at der er angivet et forskelligt pixels antal.

Men du kan da lige få en klasse som jeg lige fandt som jeg lavede i
tidernes morgen. - Den er dårlig kommenteret :)

<?php
class resizeImage {
   /* properties */
   var $aProperties = array();
   var $ImageStream;
   var $sFileLocation;
   var $filename;
   var $width;
   var $height;
   var $orientation;
   var $type;
   var $mimetype;
   var $interlace = false;
   var $jpegquality = 80;
   var $serverImagePath;
   var $fontDir;
   
   function setImage($sFileName) {
      /* load an image from file into memory */
      $this->setLocations($sFileName);
      if (file_exists($this->sFileLocation)) {
         $this->initializeImageProperties();
         $this->loadImage();
      } else {
         $this->printError('file not found ('.$sFileName.')');
      }
   }

   function setServerImagePath($path) {
      $this->serverImagePath = $path;
   }

   function setFontDir($path) {
      $this->fontDir = $path;
   }

   function printError($sMessage) {
      /* echo errormessage to client and terminate script run */
      echo $sMessage;
      exit;
   }

   function resizeAgainstHW($resizer) {
      switch($this->orientation) {
         case("landscape"):
            $this->resizetowidth($resizer); break;
         case("portrait"):
         case("square"):
         default: $this->resizetoheight($resizer); break;
      }
   }

   function loadImage() {
   /* load a image from file */
      switch($this->type) {
         case 1:
            $this->ImageStream = @imagecreatefromgif($this->sFileLocation);
            break;
         case 2:
            $this->ImageStream = @imagecreatefromjpeg($this->sFileLocation);
            break;
         case 3:
            $this->ImageStream = @imagecreatefrompng($this->sFileLocation);
            break;
         default:
            $this->printError('invalid imagetype');
      }

      if (!$this->ImageStream) {
         $this->printError('image not loaded');
      } else {
         $this->initializeImageProperties();
      }
   }

   function saveImage() {
   /* store a memoryimage to file */
      if (!$this->ImageStream) {
         $this->printError('image not loaded');
      }

      switch($this->type) {
         case 1:
         /* store a interlaced gif image */
            if ($this->interlace === true) {
               imageinterlace($this->ImageStream, 1);
            }
            imagegif($this->ImageStream,$this->sFileLocation);
            break;
         case 2:
         /* store a progressive jpeg image (with default quality value)*/
            if ($this->interlace === true) {
               imageinterlace($this->ImageStream, 1);
            }
            imagejpeg($this->ImageStream,$this->sFileLocation,$this->jpegquality);
            break;
         case 3:
         /* store a png image */
            imagepng($this->ImageStream,$this->sFileLocation);
            break;
         default:
            $this->printError('invalid imagetype');
            if (!file_exists($this->sFileLocation)) {
               $this->printError('file not stored');
            }
      }
   }

   function showImage() {
      /* show a memoryimage to screen */
      if (!$this->ImageStream) {
         $this->printError('image not loaded');
      }

      switch($this->type) {
         case 1:
            imagegif($this->ImageStream);
            break;
         case 2:
            imagejpeg($this->ImageStream);
            break;
         case 3:
            imagepng($this->ImageStream);
            break;
         default:
            $this->printError('invalid imagetype');
      }
   }

   function setImageType($iType) {
      /* set the imahe type and mimetype */
      switch($iType) {
         case 1:
            $this->type = $iType;
            $this->mimetype = 'image/gif';
            $this->setFilenameExtension();
            break;
         case 2:
            $this->type = $iType;
            $this->mimetype = 'image/jpeg';
            $this->setFilenameExtension();
            break;
         case 3:
            $this->type = $iType;
            $this->mimetype = 'image/png';
            $this->setFilenameExtension();
            break;
         default:
            $this->printError('invalid imagetype');
      }
   }

   function setLocations($sFileName) {
      /* set the photo url */
      $this->filename = $sFileName;
      $this->sFileLocation = $this->serverImagePath . $this->filename;
   }

   function initializeImageProperties() {
      /* get imagesize from file and set imagesize array */
      list($this->width, $this->height, $iType, $this->htmlattributes) =
getimagesize($this->sFileLocation);
      if (($this->width < 1) || ($this->height < 1)) {
         $this->printError('invalid imagesize');
      }

      $this->setImageOrientation();
      $this->setImageType($iType);
   }

   function setImageOrientation() {
      /* get image-orientation based on imagesize
      options: [ portrait | landscape | square ] */
      if ($this->width < $this->height) {
         $this->orientation = 'portrait';
      }
      if ($this->width > $this->height) {
         $this->orientation = 'landscape';
      }
      if ($this->width == $this->height) {
         $this->orientation = 'square';
      }
   }
   
   function setFilenameExtension() {
      /* set the imahe type and mimetype */
      $sOldFilenameExtension =
substr($this->filename,strlen($this->filename) - 4, 4);
      if (($sOldFilenameExtension != '.gif') && ($sOldFilenameExtension !=
'.jpg') && ($sOldFilenameExtension != '.png')) {
         $this->printError('invalid filename extension');
      }

      switch($this->type) {
         case 1:
            $this->filename = substr($this->filename,0,strlen($this->filename) -
4) . '.gif';
            break;
         case 2:
            $this->filename = substr($this->filename,0,strlen($this->filename) -
4) . '.jpg';
            break;
         case 3:
            $this->filename = substr($this->filename,0,strlen($this->filename) -
4) . '.png';
            break;
         default:
            $this->printError('invalid imagetype');
      }
   }

   function savefile($sFileName = NULL) {
      /* store memory image to file */
      if ((isset($sFileName)) && ($sFileName != '')) {
         $this->setLocations($sFileName);
      }
      $this->saveImage();
   }

   function resize($iNewWidth, $iNewHeight) {
      /* resize the memoryimage do not keep ratio */
      if (!$this->ImageStream) {
         $this->printError('image not loaded');
      }

      if(function_exists("imagecopyresampled")){
         $ResizedImageStream = imagecreatetruecolor($iNewWidth, $iNewHeight);
         imagecopyresampled($ResizedImageStream, $this->ImageStream, 0, 0, 0,
0, $iNewWidth, $iNewHeight, $this->width, $this->height);
      } else {
         $ResizedImageStream = imagecreate($iNewWidth, $iNewHeight);
         imagecopyresized($ResizedImageStream, $this->ImageStream, 0, 0, 0, 0,
$iNewWidth, $iNewHeight, $this->width, $this->height);
      }
      $this->ImageStream = $ResizedImageStream;
      $this->width = $iNewWidth;
      $this->height = $iNewHeight;
      $this->setImageOrientation();
   }

   function resizetowidth($iNewWidth) {
      /* resize image to given width (keep ratio) */
      $iNewHeight = ($iNewWidth / $this->width) * $this->height;
      $this->resize($iNewWidth,$iNewHeight);
   }

   function resizetoheight($iNewHeight) {
      /* resize image to given height (keep ratio) */
      $iNewWidth = ($iNewHeight / $this->height) * $this->width;
      $this->resize($iNewWidth,$iNewHeight);
   }
}

Konrad (02-10-2007)
Kommentar
Fra : Konrad


Dato : 02-10-07 08:00

Martin wrote:
> Hej ng
>
> Jeg er ude efter en contribution til oscommerce 2.2
>
> Kravet er, at når man første gang opretter et nyt produkt og uploader
> et produktbillede skal den vha gd2 resize ens originale billede til
> fx. 400 px bred, så det heller ikke fylder så meget i kb.
>
> Dette 400 px billede skal så vises når der trykkes på "vis stort
> billede".
>
> Der findes flere, der kan oprette thumbnail bagefter til visning af
> det lille produktbillede, men jeg har ikke kunnet finde noget der kan
> rezise ens store popup billede.
>
> Nogle der kender en løsning.

Ja. Gør det selv. Brug IKKE osc! Så meget har jeg da lært. Jeg ved ikke om
det hjælper, men her er koden fra min egen osc-baserede webshop:(det er vel
product_info.php du har gang i -

function pImgLink($s,$m,$l) {
if ($s==DIR_WS_IMAGES){
$r='<img src=images/white.jpg>';
} else {
$r="<a href='product_info_image.php?m=".$m."&l=".$l."'
target='productImage' style='margin-left: 14px; margin-top: 10px;'>";
$r.="<img class='noframe' src='".$s."'>";
$r.="</a>";
}
return $r;
}
//if ($extrarow!=NULL) {
echo pImgLink( DIR_WS_IMAGES.$extrarow[products_image_small_1],
DIR_WS_IMAGES.$extrarow[products_image_medium_1],
DIR_WS_IMAGES.$extrarow[products_image_large_1]
);
echo pImgLink( DIR_WS_IMAGES.$extrarow[products_image_small_2],
DIR_WS_IMAGES.$extrarow[products_image_medium_2],
DIR_WS_IMAGES.$extrarow[products_image_large_2]
);

echo pImgLink( DIR_WS_IMAGES.$extrarow[products_image_small_3],
DIR_WS_IMAGES.$extrarow[products_image_medium_3],
DIR_WS_IMAGES.$extrarow[products_image_large_3]
);

//}
?>

osC er *så* færdig, den er baseret på forældet "teknologi" - ikke desto
mindre har jeg selv skrevet osc om, af nød.

osCommerce ser godt ud på overfladen, men ved nærmere eftersyn er den ét
stort hack af dårlige løsninger.



Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste