Afficher un tiff

Signaler
Messages postés
17
Date d'inscription
jeudi 10 avril 2003
Statut
Membre
Dernière intervention
13 décembre 2006
-
Messages postés
17
Date d'inscription
jeudi 10 avril 2003
Statut
Membre
Dernière intervention
13 décembre 2006
-
svp comment on fait pour afficher une image tiff en asp.net côté client? Je ne trouve rien là dessus.
MERCI

15 réponses

Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
ben que ce soit asp.net ou n'importe quel langage web, ce que tu veux c'est du HTML.

je sais pas si les navigateurs peuvent lire le tiff, mais si oui c'est comme ca


je connais pas les images tiff, mais je crois que c'est tres lourd, sur le web, on utilise surtout le jpeg, gif, png, des formats compressés

Cyril
Messages postés
17
Date d'inscription
jeudi 10 avril 2003
Statut
Membre
Dernière intervention
13 décembre 2006

les navigateurs ne reconnaissent pas du tout le format tiff. merci quand même.
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
ok et on le lit avec quoi alors ?
regarde la classe system.drawing et une de mes sources : ecrire une image : image.jpeg.aspx
tu dois pouvoir convertir un tiff en jpg, mais ca fait du boulot

Cyril
Messages postés
17
Date d'inscription
jeudi 10 avril 2003
Statut
Membre
Dernière intervention
13 décembre 2006

le problème c'est qu'il faut pouvoir convertir une image tiff qui se trouve sur le serveur en jpeg pour pouvoir l'affichée au niveau client. Bien sur il faudrait que ce ne soit pas trop lent et pas trop volumineux parce que les clients devraient pouvoir accéder à 7 millions d'images tiff!!! Je vais jeter un coup d'oeil à ta source. merci pour ton aide. j'espère que tu pourra encore m'aider parce que je galère un peu (beaucoup!).

A plus!
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
j'ai voulu regarder si c'etait possible : voici la source en question : http://www.aspfr.com/code.aspx?ID=18154 rien ne dit que ce n'est pas possible, seulement j'ai pas de tiff sous la main donc je ne peux pas tester.

Si tu as 7 millions d'images tiff, faudra peut etre envisagé une autre solution, la solution que je te propose fera en faite ca :
le jpg ne sera pas enregistré sur le disque dur, mais ca oblige à refaire le jpeg pour chaque tiff appellé :sad)

la solution que je pense, est de faire une page, voir un programme si tu peux les executer sur le serveur, qui te convertit tes 7 millions d'images rien qu'une fois, ca risque d'etre long, voir meme tres long et tu as interet d'avoir de la place sur le serveur, car 7 millions de jpeg + 7 millions de tiff ca doit faire beaucoup :) mais c'est la seule solution que je vois pour l'instant, essaye de te renseigner si un navigateur peut lire un tiff par une autre méthode, plugin, voir pourquoi pas, lire un tiff a partir de flash ... ou tout autre solution qui eviterait de convertir tes "quelques" tiff en jpeg :)

une simple question, un tiff ca pese combien ? et ca fait quel taille en moyenne ?

Cyril
Messages postés
17
Date d'inscription
jeudi 10 avril 2003
Statut
Membre
Dernière intervention
13 décembre 2006

déjà ta source "ecrire une image : image.jpeg.aspx" m'a permis d'afficher le tiff. super cool. ta réponse va surement m'aider encore plus, c'est génial, je commence à voir le bout du tunnel!
en moyenne une image tif fera 1 mega. je ne peux pas toutes les convertir d'un coup parce que ça prendrait trop de place.
Maintenant si tu as une idée pour convertir du tiff multipage(plusieurs image dans un seul tiff) et faire des zoom!!!
En tout cas merci beaucoup et je te tiendrais au courant de la suite.
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
1 tiff = 1Mo ==> 7 millions de tiff = 7To ? je me suis planté non ? sinon je veux le meme disque dur pour noel ;)

t'as regardé le temps que tu mets pour afficher l'image avec ma méthode ?

pour cela c'est assez simple

dim t1 as new date = now
' execution
dim result as timespan = DateDiff(now - t1)
ou quelque chose comme ca, enfin tu vois le principe :)

car la ca risque d'etre lourd, meme tres lourd si tu as plusieurs personnes en meme temps, je pense qu'il faudrait mieux convertir ton tiff en jpg, d'afficher le jpg et de supprimer le tiff, faire en quelque sorte une migration de tes tiff vers tes jpg à la demande ...

pour ce qui est du multipage, je comprend pas trop. tu as une iage de par exemple 800*600 et à l'interieur tu as 4 images de 400*300 ? et tu veux la decouper pour afficher qu'une seule partie de ton image ? oui c'est possible, mais c'est plus un serveur qu'il va te falloir, mais un supercalculateur ;)
si c'est bien le cas, je te conseil alors de faire ce que je t'ai dit tout à l'heure, de migrer un tiff vers 4jpg à la demande.

c'est pas tres compliqué de faire ca, regarde la classe system.drawing et c'est assez simple. le plus compliqué ca va etre de ne pas perdre de qualité en un jpg et le tiff ... mais bon c'est des reglages du system.drawing

@+

Cyril
Messages postés
17
Date d'inscription
jeudi 10 avril 2003
Statut
Membre
Dernière intervention
13 décembre 2006

salut, je crois que tu n'as pas bien compris ce qu'est un tiff multipage. alors c'est un tiff qui comporte plusieurs pages (chacune contenant une image) les images ne sont pas côte à côte mais sur des pages différentes et peuvent avoir des rézsolutions totalement différentes. (un peu comme un pdf qui a plusieurs pages.) pour convertir un tiff multipage en jpg il faudra convertir chacune des pages séparemment.
pour le disque dur (que je ne pourrais pas t'offrir pour noel malgré ton aide!!!) il s'agit d'un juke box de dvd (ou plusieurs). le tiff est une contrainte qu'on a parce que les personnes concernées ont déjà numériser les images en tiff. je peux pas faire autrement parce que dans d'autres applic ils utilisent peut être le tiff. or moi pour mon applic je suis obligée d'avoir du jpeg (ou gif ou tout autre format s'affichant dans une page web!)

voilà grace à toi ce que je fais pour afficher un tiff, ça à l'air assez rapide mais je sais pas ce que ça donnerai avec plusieurs accès simultannés:

Dim aa, bb As System.Drawing.Image
Dim zz As System.Drawing.Bitmap
aa = System.Drawing.Image.FromFile("c:\a.tif")
Dim oB As New Bitmap(aa, aa.Width, aa.Height)
Dim g As Graphics = Graphics.FromImage(oB)
g.SmoothingMode = Drawing.Drawing2D.SmoothingMode.HighQuality
oB.Save(Response.OutputStream, Imaging.ImageFormat.Jpeg)

tu as raison, il faudrait pouvoir diviser le tiff en autant d'images qu'il contient mais pas comme tu le propose parce que ce sont des pages différentes. il faut que je trouve comment accéder aux différentes pages d'un tiff.

merci et à plus.
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
ok, je pensais qu'un tiff etait une image et non un document de plusieurs pages :big)
avec cette méthode tu affiches que la premiere page ? je sais pas contre pas du tout comment afficher une autre page ... tu comptes rester avec cette méthode, c'est à dire convertir le tiff à chaque fois ? et non enregistrer l'image sur le dur en jpg ? coté performance t'as interet d'assurer :)

sinon pour le disque dur t'es sur que c'est pas possible pour noel ? ;)

Cyril
Messages postés
17
Date d'inscription
jeudi 10 avril 2003
Statut
Membre
Dernière intervention
13 décembre 2006

alors avec aa.SelectActiveFrame(System.Drawing.Imaging.FrameDimension.Page, 0) j'arrive à selectionner la page que je veux.

en modifiant un peu le code précédent j'arrive à afficher la page dans un objet image:

Dim aa, bb As System.Drawing.Image
Dim zz As System.Drawing.Bitmap
Dim pp As System.Web.UI.WebControls.Unit
aa = System.Drawing.Image.FromFile("c:\noname.tif")
aa.SelectActiveFrame(System.Drawing.Imaging.FrameDimension.Page, 0)
Dim oB As New Bitmap(aa, aa.Width, aa.Height)
Dim g As Graphics = Graphics.FromImage(oB)


(System.Drawing.Imaging.FrameDimension.Page)
g.SmoothingMode = Drawing.Drawing2D.SmoothingMode.HighQuality
oB.Save("c:\image.jpg", Imaging.ImageFormat.Jpeg)
Image1.Width = pp.Pixel(aa.Width)
Image1.Height = pp.Pixel(aa.Height)
Image1.ImageUrl = "c:\image.jpg"

la méthode précédente m'affichait la page dans une nouvelle page web surlaquelle je ne peux rien faire (ni zoomer ni changer de page).
mon problème avec la nouvelle méthode c'est que en faisant ça je suis obligée de créer le jpg sur le disque. or j'aimerai avoir un compromis entre les deux. cad arriver à afficher la page dans l'objet image en me servant de outputstream.

pour noel ça va être un peu juste on verra pour paques si je peux faire quelque chose!!!
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
on ne peut pas faire ce que tu veux directement en une seule page :(
on pourrait mais tres difficilement faudrais utiliser des concepts que je ne connais encore pas, les fichiers axd etc... mais en asp.net 2.0 cela sera beaucoup plus facile :)

pour resoudre cela il faut donc faire deux pages, une qui s'appelle image.jpeg.aspx tu lui met un querystring dessus, genre image.jpeg.aspx?id=5222&page=2 la tu fais le response.outputStream

et dans une autre page tu ajoutes l'image tout simplement en faisant image1.url = "image.jpeg.aspx?id=5222&page=2"

:)

Cyril
Messages postés
17
Date d'inscription
jeudi 10 avril 2003
Statut
Membre
Dernière intervention
13 décembre 2006

salut,
finallement je vais faire ce que tu m'as dit!! (deux pages)
pour ça j'ai fait :

Dim aa As New PopUp()
Dim ee As New System.EventArgs()
aa.ID = "aa"

aa.Page_Load(sender, e)

mais je n'arrive pas à l'afficher, il me faudrait quelque chose du genre 'aa.show' qui n'existe pas. popup est une page web que j'ai créée (webform qui s'appelle popup.aspx).

en plus si tu pouvais me donner un peu plus de détail sur le querystring que je ne connais pas du tout ça m'arrangerai!

merci pour ton aide.
Messages postés
17
Date d'inscription
jeudi 10 avril 2003
Statut
Membre
Dernière intervention
13 décembre 2006

salut,
finallement je vais faire ce que tu m'as dit!! (deux pages)
pour ça j'ai fait :

Dim aa As New PopUp()
Dim ee As New System.EventArgs()
aa.ID = "aa"

aa.Page_Load(sender, e)

mais je n'arrive pas à l'afficher, il me faudrait quelque chose du genre 'aa.show' qui n'existe pas. popup est une page web que j'ai créée (webform qui s'appelle popup.aspx).

en plus si tu pouvais me donner un peu plus de détail sur le querystring que je ne connais pas du tout ça m'arrangerai!

merci pour ton aide.
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
si seulement ton code pouvait marcher ... ca nous implifierait bien la vie :)

Je t'explique ton erreur.
En faisant aa.PageLoad(blabla) tu as voulu appeller ta popup comme avec la méthode show en application windows, le problème c'est que tu travailles en web, et en mode deconnecté, tu ne peux pas directement interagir avec le browser, asp.net genere des réponses lisible par le protocole HTTP, c'est à dire en general de HTML, pour pouvoir interagir avec le browser, il faut passer par des scripts javascript, en l'occurence pour ouvrir une popup, tu vas devoir utiliser la fonction javascript window.open

pour pouvoir ecrire du code javascript il existe plusieurs méthodes, la premiere est d'ecrire directement le code javascript dans la page aspx, ca aurait pour conséquences que ce code javascript sera dans chaque requete est donc executé chaque fois que la page est chargé.
ce que tu veux c'est pouvoir ecrire du javascript quand tu le veux, il y a pour ca une méthode tres simple, mais tres sale aussi :big) je ne l'expliquerais donc pas, et une manière joli, mais qui fait appel a des concepts obscurs :shock)

premierement il faut declarer ton script
dim script as string = "<script language=""javascript""><!--" & VbNewLine
script &= "window.open(""Titre de la popup"",""url de la popup"",""[param par exemple]width=500px,height=600px;"");" VbNewline
script &= "--></script>" & vbnewline

je suis pas sur de la syntaxe ni de la casse de window.open, a verifier sur javascriptfr.com

ensuite pour ecrire ce script javascript :
Page.registerStartupScript("identifier",script)

et la ton script javascript est rajouté à la page

l'identifier sert à ce que ton script soit rajouté qu'une fois, en effet dans certains cas, tableau par exemple, on souhaite faire appel à une méthode javascript, et celle ci doit ecrite qu'une seule fois, et non autant de fois qu'il y a de ligne on fait donc un truc du genre

if page.isstartupScriptregistered("identifier") then
Page.registerStartupScript("identifier",script)
end if

Voila pour ce qui est du javascript, je suis pas sur du nom de mes classes, j'ai fait ca de mémoire, sans IDE, il y a peut etre une difference dans la denomination des classes ...

pour ce qui est des querystring, c'est tres simple, sur cette page, tu vois qu'il y a l'url + des autres params
http://www.aspfr.com/forum.v2.aspx?rm=1&ID=350130
on voit qu'il y a le paramètre rm qui vaut 1 et ID qui vaut 350130

pour recuperer ces paramètre, rien de plus simple,
request.querystring("rm") (as string)

tu peux passer tout les paramètres que tu veux, du moment que ce sont des strings (integer aussi bien sur :) )
les contraintes sont, que n'ont peut pas passer n'importe quel objet, pour cela il faut utiliser des variables sessions, et qu'on ne doit pas depasser une certains taille d'url 512 caractères je crois.
et l'autre inconvenient c'est que le client peut mettre les valeurs qu'il veut, une gestion des erreurs importante est necessaire !
l'avantage est que le client peut mettre cette page en favoris, et que c'est hyper facile a mettre en oeuvre

pour ecrire ces paramètres, il suffit de faire un lien vers la page avec les querystring ...

j'espere que ce petit "cours" t'as aidé, regarde sur le site pour les querystring, il y a plein de post qui en parlent, pour les variables session aussi, et j'ai fait une source la dessus, et pour le javascript, j'ai du faire une source en rapport, et il y a aussi des sources utilisant cette méthode.

@+

Cyril
Messages postés
17
Date d'inscription
jeudi 10 avril 2003
Statut
Membre
Dernière intervention
13 décembre 2006

merci beaucoup pour la leçon!! ça va bien me servir.
je vais jeter un coup d'oeil à tout ça, faire des tentatives et de toutes façons je te tiendrais au courant des résultats obtenus (ou des échecs!!!!).

A plus