2011-05-08 3 views
1

J'ai un script PHP où je veux afficher des images à l'intérieur d'un div, mais il y a quelques restrictions concernant la largeur maximale et la hauteur.
Par exemple, une image peut avoir une largeur = 1000px et une hauteur = 600px, mais la largeur maximale et la hauteur de l'image ne doivent pas dépasser 500 px pour pouvoir entrer dans la div.
Donc, je veux convertir les dimensions de sorte que l'image s'insère dans la div mais le rapport entre la largeur et la hauteur reste le même. Exemple: dimensions de l'image: 1000x600, largeur maximale = 500, hauteur maximale = 400. Le résultat de la cote ne doit pas être 500x400 mais 500x300. J'ai écrit un morceau de code qui semble fonctionner, mais il ne semble pas fonctionner correctement en termes de performances quand il y a beaucoup d'images, car cela fait quelque chose comme réduire la taille de 10% étape par étape jusqu'à ce que le résultat soit dans la limite acceptée.php - réduire les dimensions de l'image algorithme

Des idées? Merci d'avance.

Répondre

2

Ce ne sera pas une bonne idée de redimensionner vos images dynamiquement chaque fois qu'un utilisateur accède à votre page. En fonction du script que vous utilisez, like this one, vous devez d'abord redimensionner toutes vos images et les enregistrer. Ainsi, vous n'aurez pas de surcharge chaque fois qu'un utilisateur accédera à votre page.

Afficher une partie du code que vous avez jusqu'à présent, peut-être peut-on améliorer

1

Ce que vous demandez n'est pas très clair.

1) Quelle est la taille de l'échelle? Si ce n'est pas beaucoup, le laisser à CSS pourrait être une bonne idée.

2) Je présume que vous utilisez GD ou ImageMagick ou quelque chose? Peut-être que vous êtes après quelque chose comme ceci:

function scale($x,$y,$maxX, $maxY) { 
    if ($x > $maxX) return array($maxX, $maxX/$x * $y); 
    else return array($x, $y); 
} 
... 
<declare variables $toScaleX, $toScaleY, $maxX, $maxY> 
list($x, $y) = scale($toScaleX, $toScaleY, $maxX, $maxY); 
list($x, $y) = scale($y, $x, $maxY, $maxX); 
<$x, $y, are now the desired dimensions to scale to> 
4

Cette échelles vos valeurs à maximum 2 fois.

<?php 
define('MAX_WIDTH', 500); 
define('MAX_HEIGHT', 200); 

function scale($w, $h) 
{ 
    $rw = $w; $rh = $h; $factor = 0.0; 

    if($rw > MAX_WIDTH) 
    { 
     $factor = $rw/MAX_WIDTH; 
     $rw = MAX_WIDTH; 
     $rh = floor($factor * $rh); 
    } 
    if($rh > MAX_HEIGHT) 
    { 
     $factor = $rh/MAX_HEIGHT; 
     $rh = MAX_HEIGHT; 
     $rw = floor($factor * $rw); 
    } 

    return array($rw, $rh); 
} 
echo explode('x', scale(1000, 500)); 
?> 
+0

Exactement ce que je cherchais. Merci! – jmotes

Questions connexes