DIMIMG=700
fichier_$ = OpenFileRequester( "Recherche image", GetPathPart(fichier_$), "Fichier image|*.jpg;*.jpeg;*.png;*.bmp;*.tif;*.tga", 0)
;fs = FileSize(fichier_$)
If fichier_$ And fs>10
If LoadImage( 1, fichier_$)
pds = ImageDepth(1)
L.f = ImageWidth(1)
H.f = ImageHeight(1)
If H<>DIMIMG And L<>DIMIMG
If L>H Or L=H
If H > DIMIMG Or H < DIMIMG
S=DIMIMG*100
SS=S/H
H=DIMIMG
T=L*SS
L=T/100
ff=1
EndIf
If L > DIMIMG Or L < DIMIMG
d=DIMIMG*100
dd=d/L
L=DIMIMG
T=H*dd
H=T/100
ww=1
EndIf
Else
If L > DIMIMG Or L < DIMIMG
d=DIMIMG*100
dd=d/L
L=DIMIMG
T=H*dd
H=T/100
w=1
EndIf
If H > DIMIMG Or H < DIMIMG
S=DIMIMG*100
SS=S/H
H=DIMIMG
T=L*SS
L=T/100
f=1
EndIf
EndIf
EndIf
If w And f Or ww And ff
Round(L,0):Round(H,0)
EndIf
ResizeImage(1,L,H,#PB_Image_Smooth)
comme vous le voyez; 700 est la limite à ne pas depacer que se soit en hauteur ou en largeur
donc si vous connaissez une autre façon, surtout n'hezitez pas
;modifie la taille de sortie par défaut
Global TailleL.l=1024
Global TailleH.l=768
Global L.l,H.l,Limg.l,Himg.l
;(.....code)
Limg=ImageWidth(#IMG)
Himg=ImageHeight(#IMG)
Debug "Image chargée ! X : "+Str(Limg)+" Y : "+Str(Himg)
; Calcule de la taille des images de destination.
; ça permet d'adapter la taille en fonction du format paysage/portrait
If Limg>Himg
L=TailleL
H=(Himg*TailleL)/Limg
Debug " Resolution de sortie :"
Debug " X : "+Str(L)+" Y : "+Str(H)
ElseIf Himg>Limg
H=TailleH
L=(Limg*TailleH)/Himg
Debug " Resolution de sortie :"
Debug " X : "+Str(L)+" Y : "+Str(H)
ElseIf Limg=Himg
H=TailleH
L=TailleH ; H car doit faire la Hauteur en taille car les écrans sont plus large que haut...
Debug " Resolution de sortie :"
Debug " X : "+Str(L)+" Y : "+Str(H)
Else
Debug "erreur redimensionnement"
EndIf
;- Redimensionnement de l'image
ResizeImage(#IMG,L,H,#PB_Image_Smooth)
; +--------------------------------------+
; | code par case @ purebasic forums |
; | case[at]moonshade.org |
; +--------------------------------------+
; |procedure de redimentionnement d'image|
; +--------------------------------------+
; | parametres : |
; +--------------------------------------+
; |Image , image a redimentionner |
; |Largeur , largeur de l'image en sortie|
; |Hauteur , hauteur de l'image de sortie|
; |Options : #proportion : conserve les |
; | proportions |
; | #Raw : n'adouci pas l'image |
; | pendant le |
; | redimentinnement |
; | #copie : crée une copie de |
; | l'image et conserve|
; | l'originale |
; | #Pourcent : la taille est |
; | exprimee en |
; | pourcentage |
; +--------------------------------------+
; | si largeur ou hauteur =0 |
; | le redimentionnement est |
; | obligatoirement proportionel |
; | |
; | si le redimentionnement est |
; | proportionel et que les deux tailles |
; | sont indiquées, la largeur est |
; | utilisée comme référence |
; | |
; | si Largeur et hauteur =0 pas de redim|
; +--------------------------------------+
; constantes
#Raw =%1
#Proportion =%10
#copie =%100
#pourcentage=%1000
; declaration procedure
Declare Resize(Image,Largeur,Hauteur=0,Options.b=0)
;
;
;-------------------------------------------------------------------------------------
; exemple
UsePNGImageDecoder():UseJPEGImageDecoder()
img=LoadImage(#PB_Any,OpenFileRequester("choisissez une image","","*.*",0))
;
;
;
If IsImage(img) ; une image valide a été chargée
Debug "taille image d'origine:"+Str(ImageWidth(img))+"x"+Str(ImageHeight(img))
pic=Resize(img,50,0,#Proportion|#copie|#pourcentage)
Debug "redimentionnement de l'image effectué 50% proportionel sur une copie"
Debug "taille image d'origine :"+Str(ImageWidth(img))+"x"+Str(ImageHeight(img))
If pic<>img ; nouvelle image crée
Debug "taille image de la copie :"+Str(ImageWidth(pic))+"x"+Str(ImageHeight(pic))
EndIf
;
FreeImage(pic)
pic=Resize(img,50,0,#Proportion|#copie)
Debug "redimentionnement de l'image effectué 50 pixel de large proportionel sur une copie"
Debug "taille image d'origine :"+Str(ImageWidth(img))+"x"+Str(ImageHeight(img))
If pic<>img ; nouvelle image crée
Debug "taille image de la copie :"+Str(ImageWidth(pic))+"x"+Str(ImageHeight(pic))
EndIf
;
FreeImage(pic)
pic=Resize(img,0,200,#pourcentage|#Proportion|#copie)
Debug "redimentionnement de l'image effectué 200% de haut proportionel sur une copie"
Debug "taille image d'origine :"+Str(ImageWidth(img))+"x"+Str(ImageHeight(img))
If pic<>img ; nouvelle image crée
Debug "taille image de la copie :"+Str(ImageWidth(pic))+"x"+Str(ImageHeight(pic))
EndIf
;
FreeImage(pic)
pic=Resize(img,150,200,#pourcentage|#copie)
Debug "redimentionnement de l'image effectué 200% de haut & 150% de large proportionel sur une copie"
Debug "taille image d'origine :"+Str(ImageWidth(img))+"x"+Str(ImageHeight(img))
If pic<>img ; nouvelle image crée
Debug "taille image de la copie :"+Str(ImageWidth(pic))+"x"+Str(ImageHeight(pic))
EndIf
;
FreeImage(pic)
pic=Resize(img,150,200)
Debug "redimentionnement de l'image d'origine effectuée 150x200"
Debug "taille image d'origine :"+Str(ImageWidth(img))+"x"+Str(ImageHeight(img))
If pic<>img ; nouvelle image crée
Debug "taille image de la copie :"+Str(ImageWidth(pic))+"x"+Str(ImageHeight(pic))
EndIf
EndIf
; procedure
Procedure Resize(Image,Largeur,Hauteur=0,options.b=0)
If IsImage(Image)=0
Debug "erreur 'image innexistante'"
ProcedureReturn
EndIf
If ((options<<5 &$ff)>>7 )=1 ; #copie
Image=CopyImage(Image,#PB_Any) ; on crée une copie de l'image qu'on utilise en place de la source
EndIf
If IsImage(Image)=0
Debug "erreur 'image innexistante'"
ProcedureReturn
EndIf
;
Mul_l.f ; multiplicateur largeur
mul_h.f ; multiplicateur hauteur
Largeur_Source=ImageWidth(Image)
Hauteur_Source=ImageHeight(Image)
;
If Largeur=0 And Hauteur=0 ; taille =0x0 pas de redimentionnement
Debug "erreur 'taille 0x0'"
ProcedureReturn
EndIf
If Largeur=0 ; la hauteur est utilisée comme référence
If ((options<<4 &$ff)>>7 )=1 ;pourcentage
mul_l=Hauteur/100.0
mul_h=Mul_l
Else
mul_l=Hauteur/Hauteur_Source
mul_h=Mul_l
EndIf
EndIf
If hauteur=0 ; la largeur est utilisée comme référence
If ((options<<4 &$ff)>>7 )=1 ;pourcentage
mul_l=Largeur/100.0
mul_h=Mul_l
Else
mul_l=Largeur/Largeur_Source
mul_h=Mul_l
EndIf
EndIf
If hauteur>0 And largeur >0 ;les deux dimensions sont fournie
;
If ((options<<6 &$ff)>>7 )=1 ; mode proportionel (par defaut)
If ((options<<4 &$ff)>>7 )=1 ;pourcentage
mul_l=Largeur/100.0
mul_h=Mul_l
Else
mul_l=Largeur/Largeur_Source ; on calcul le multiplicateur pour la largeur
mul_h=Mul_l ; qu'on utilise pour la hauteur
EndIf ;
Else ; mode non proportionel
If ((options<<4 &$ff)>>7 )=1 ;pourcentage
mul_h=Hauteur/100.0
mul_l=Largeur/100.0
Else
mul_l=Largeur/Largeur_Source ; on calcul le multiplicateur pour la largeur
mul_h=Hauteur/Hauteur_Source ; et celui pour la hauteur
EndIf
EndIf
EndIf
ResizeImage(Image,Largeur_Source*Mul_l,Hauteur_Source*mul_h,((options<<7 &$ff)>>7 )) ; redimentionnement de l'image
ProcedureReturn Image
EndProcedure