2009-02-07 7 views
0

Je n'arrive toujours pas à définir la largeur et la hauteur d'une balise img. Le imr src est extrait dynamiquement d'une base de données. Les images tirées de la base de données peuvent avoir des largeurs et des hauteurs variables, donc j'ai besoin de régler le contrôle img. Parfois, la largeur et la hauteur sont définies correctement et parfois elles ne le sont pas. Je ne peux pas comprendre pourquoi. Toute aide serait grandement appréciée. Merci!Définition par programme de la hauteur/largeur de l'image à partir de la base de données

Voici ce que je fais maintenant.

try 
    { 
     byte[] byteArray = GetImage(); 
     using (Bitmap bmp = ByteArrayToBitmap(byteArray)) 
     { 
      //image is the img tag. 
      image.Style["width"] = bmp.Width.ToString(); 
      image.Style["height"] = bmp.Height.ToString(); 
     } 
    } 
    catch (Exception ex) 
    { } 

EDIT: Cela semble être un problème uniquement dans IE. Chrome et Firefox semblent fonctionner correctement. En outre, lorsque IE7 n'affiche pas l'image avec la hauteur/largeur appropriée si le navigateur est actualisé, il s'affiche correctement. Parfois ...

+0

sont les valeurs de largeur et de hauteur manquant parfois du html? Ou sont parfois faux? –

+0

Essayez de placer un code de journalisation dans votre bloc catch pour voir si vous obtenez une exception – Cal

+0

Les valeurs Tighe-height et width sont correctement définies dans la balise img, mais la hauteur et la largeur de l'image ne semblent pas correspondre à ces valeurs . Exemple, j'ai une image qui est supposée être plus large que haute et c'est dans le style html = "width: 450; height: 240;" mais c'est plus grand que longtemps. – SquidScareMe

Répondre

2

Cela est dû au fait que vous devez supprimer les attributs width et height du tag. Le simple fait de changer la largeur et la hauteur de l'image CSS ne fonctionnera pas.

Essayez quelque chose comme ça, c'est en Javascript;


imageTag.removeAttribute('width'); 
imageTag.removeAttribute('height'); 
+0

Merci d'avoir essayé, mais cela n'a pas fonctionné. J'ai fait comme vous l'avez dit dans codebehind dans Page_PreInit(). – SquidScareMe

+0

Avez-vous essayé de le faire * chaque fois qu'une nouvelle image est chargée? Essayez le débogage et élaborez exactement ce que la base de données retourne, et s'il y a un motif à quand cela ne fonctionne pas. –

2

En regardant votre code, je suggère une autre approche; Puisque vous avez déjà une copie de l'image dans votre tableau d'octets, pourquoi ne pas demander à votre application de redimensionner l'image et de renvoyer une taille prévisible au client? Vous auriez l'avantage de ne pas vous soucier de la façon dont les différents navigateurs sont redimensionnés et éventuellement de réduire la qualité de l'image.

Exemple ici ... http://www.west-wind.com/Weblog/posts/283.aspx

+0

Bonne idée mais le problème est que les images ont des rapports hauteur/largeur différents. Si je redimensionne à une hauteur et une largeur que je choisis, je risque de déformer l'image. Il n'y a pas de taille universelle à laquelle je peux les redimensionner. – SquidScareMe

+0

C'est bien - ce que vous pouvez faire est de définir une largeur maximale OU hauteur, puis calculer la taille maximale que vous pouvez faire jusqu'à ce qu'il répond à l'exigence de hauteur ou de largeur. Ensuite, il suffit de trouver le% entre l'original et votre # fin, et de dimensionner l'autre dimension. Vous voulez un échantillon de code? – Brandon

+0

+1 - Il vous permettra d'économiser votre bande passante et de produire de meilleures images à des tailles inférieures à l'original. Le navigateur ne fait aucun filtrage anisotrope ou aucune autre technique pour redimensionner une image, donc il aura l'air merdique. Il est trivial de créer un HttpHandler qui peut redimensionner une image et maintenir le ratio d'aspect. –

Questions connexes