Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

ecraser in jpg par un autre et garder le meme nom

6 réponses
Avatar
Dan
Bonjour a tous.

Je veux modifier le poids en Ko d'une image JPG et je la sauvegarde.

si je lui donne un autre nom que celui d'origine ca fonctionne tres bien
mais si je delete la photo d(origine et enregistre cette photo sous ce
meme nom j'ai l'erreur; ce fichier est utilise par .....

que me conseillez vous pour pouvoir sous vb.net 2008 ecraser une JPG par
une autre?

D'avance merci de votre aide l

ci dessous ce qui marche car je ne lui donne pas le meme nom





Private Sub modiftaille_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles modiftaille.Click

'***************************

Dim cheminb As String = "d:\essai.jpg "

Dim longd = Len(cheminb) - 4

Dim cheminbis As String = (Microsoft.VisualBasic.Left(cheminb, longd)) &
"bis.jpg"

Dim bmp1 As New Bitmap(cheminb)

Dim jgpEncoder As ImageCodecInfo = GetEncoder(ImageFormat.Jpeg)

Dim myEncoder As System.Drawing.Imaging.Encoder =
System.Drawing.Imaging.Encoder.Quality

Dim myEncoderParameters As New EncoderParameters(1)

Dim myEncoderParameter As New EncoderParameter(myEncoder, 50&)

myEncoderParameters.Param(0) = myEncoderParameter

If (File.Exists(cheminbis)) = True Then

Kill(cheminbis)

End If

bmp1.Save(cheminbis, jgpEncoder, myEncoderParameters)

' recuperer date du fichier cheminbis

FileDateTime(cheminb)

Dim dmodif = Directory.GetLastWriteTime(cheminb)

Dim dcrea = Directory.GetCreationTime(cheminb)

'Changer date du fichier ZZ

File.SetCreationTime(cheminbis, dcrea)

File.SetLastWriteTime(cheminbis, dmodif)

'*********************************

Label2.Text = "taille: " & (FileLen(totala(nbd)) / 1000) & " ko "

totala(nbd) = cheminbis

' suppression du fichier initial

If FileLen(totala(nbd)) > 0 Then

lirmedia(totala(nbd))

End If

' If (File.Exists(cheminb)) = True Then

'Kill(cheminb)

' End If

End Sub

6 réponses

Avatar
Patrice
C'est indiqué dans la doc (erreur GDI+ ?) (Si ce n'est pas cela le code qui
ne marche pas avec la mention exacte de l'erreur serait plus
intéressant...)


"Notes
L'enregistrement de l'image dans le fichier qui a servi à la construire
n'est pas autorisé et lève une exception. "
(tiré de http://msdn.microsoft.com/fr-fr/library/ytz20d80.aspx).

Je serais moi-même curieux de savoir la raison exacte de cette limitation
(jimagine que le fichier reste ouvert jusqu'à ce que le bitmap soit détruit

Une solution simple serait de passer par un fichier temporaire (ou peut-être
de créer un second bitmap à partir du premier ?)...

.En cherchant la deuxième solution peut par exemple donner :
http://fabdecret.blogspot.com/2007/08/bitmap-lock.html qui crée le bitmap
depuis un stream



--
Patrice


"Dan" a écrit dans le message de groupe de discussion
: 49a3d363$0$21740$
Bonjour a tous.

Je veux modifier le poids en Ko d'une image JPG et je la sauvegarde.

si je lui donne un autre nom que celui d'origine ca fonctionne tres bien
mais si je delete la photo d(origine et enregistre cette photo sous
ce meme nom j'ai l'erreur; ce fichier est utilise par .....

que me conseillez vous pour pouvoir sous vb.net 2008 ecraser une JPG par
une autre?

D'avance merci de votre aide l

ci dessous ce qui marche car je ne lui donne pas le meme nom





Private Sub modiftaille_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles modiftaille.Click

'***************************

Dim cheminb As String = "d:essai.jpg "

Dim longd = Len(cheminb) - 4

Dim cheminbis As String = (Microsoft.VisualBasic.Left(cheminb, longd)) &
"bis.jpg"

Dim bmp1 As New Bitmap(cheminb)

Dim jgpEncoder As ImageCodecInfo = GetEncoder(ImageFormat.Jpeg)

Dim myEncoder As System.Drawing.Imaging.Encoder =
System.Drawing.Imaging.Encoder.Quality

Dim myEncoderParameters As New EncoderParameters(1)

Dim myEncoderParameter As New EncoderParameter(myEncoder, 50&)

myEncoderParameters.Param(0) = myEncoderParameter

If (File.Exists(cheminbis)) = True Then

Kill(cheminbis)

End If

bmp1.Save(cheminbis, jgpEncoder, myEncoderParameters)

' recuperer date du fichier cheminbis

FileDateTime(cheminb)

Dim dmodif = Directory.GetLastWriteTime(cheminb)

Dim dcrea = Directory.GetCreationTime(cheminb)

'Changer date du fichier ZZ

File.SetCreationTime(cheminbis, dcrea)

File.SetLastWriteTime(cheminbis, dmodif)

'*********************************

Label2.Text = "taille: " & (FileLen(totala(nbd)) / 1000) & " ko "

totala(nbd) = cheminbis

' suppression du fichier initial

If FileLen(totala(nbd)) > 0 Then

lirmedia(totala(nbd))

End If

' If (File.Exists(cheminb)) = True Then

'Kill(cheminb)

' End If

End Sub



Avatar
Jérémy Jeanson
Bonjour tout le monde,

Ceci est in souci récurant ;)

En fait du fait des objets que l'on utilise on oublie régulièrement de
libérer les ressources. Rien de grave un Dispose et un Nothing après
usage et le ménage est fait.

J'ai déjà fais un post à ce sujet il n'y a pas si longtemps que cela qui
permet de montrer comment faire des modification sur une image déjà
chargée :
http://www.jjeanson.fr/1/Post.aspx?post<2c156a-acd5-4216-9868-06140f176b8a
--
Jérémy JEANSON
MCP
http://www.jjeanson.fr
Avatar
Dan
Salut Jérémy

sur la premiere ligne : Dim fs As New StreamReader(totala(nbd))
je recupere l'erreur suivante i

Erreur 8 E:vbnetWindowsApplication1WindowsApplication1Form5.vb 936 13 La
résolution de surcharge a échoué, car aucun 'New' accessible ne peut être
appelé sans conversion restrictive :
'Public Sub New(path As String)': L'argument qui correspond au paramètre
'path' passe de 'Object' à 'String'.
'Public Sub New(stream As System.IO.Stream)': L'argument qui correspond
au paramètre 'stream' passe de 'Object' à 'System.IO.Stream'. ALBUM1

voici le contenu de mon bouton

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click

Dim fs As New StreamReader(totala(nbd))
image1.Image = Image.FromStream(fs.BaseStream)
fs.Close()
fs.Dispose()
fs = Nothing

Dim fi As New FileInfo(totala(nbd))
fi.CreationTime = DateTime.Now
End Sub

que me manque t'il , j'ai essaye avec
Dim fs As System.IO.StreamReader
ca ne change rien
que faire?





"Jérémy Jeanson" a écrit dans le message de
news:
Bonjour tout le monde,

Ceci est in souci récurant ;)

En fait du fait des objets que l'on utilise on oublie régulièrement de
libérer les ressources. Rien de grave un Dispose et un Nothing après usage
et le ménage est fait.

J'ai déjà fais un post à ce sujet il n'y a pas si longtemps que cela qui
permet de montrer comment faire des modification sur une image déjà
chargée :
http://www.jjeanson.fr/1/Post.aspx?post<2c156a-acd5-4216-9868-06140f176b8a
--
Jérémy JEANSON
MCP
http://www.jjeanson.fr


Avatar
Jérémy Jeanson
je crois que c'est au niveau de ta méthode totala(nbd).
Retourne elle bien une String?
--
Jérémy JEANSON
MCP
http://www.jjeanson.fr
Avatar
Dan
Salut Patrice
efectivement le fichier reste ouvert,la solution de Jérémy semble la bonne
et je dois essayer de voir.
Merci de toutes ces informations en tout cas.
A+
Dan
"Patrice" <http://www.chez.com/scribe/> a écrit dans le message de
news:
C'est indiqué dans la doc (erreur GDI+ ?) (Si ce n'est pas cela le code
qui ne marche pas avec la mention exacte de l'erreur serait plus
intéressant...)


"Notes
L'enregistrement de l'image dans le fichier qui a servi à la construire
n'est pas autorisé et lève une exception. "
(tiré de http://msdn.microsoft.com/fr-fr/library/ytz20d80.aspx).

Je serais moi-même curieux de savoir la raison exacte de cette limitation
(jimagine que le fichier reste ouvert jusqu'à ce que le bitmap soit
détruit

Une solution simple serait de passer par un fichier temporaire (ou
peut-être de créer un second bitmap à partir du premier ?)...

.En cherchant la deuxième solution peut par exemple donner :
http://fabdecret.blogspot.com/2007/08/bitmap-lock.html qui crée le bitmap
depuis un stream



--
Patrice


"Dan" a écrit dans le message de groupe de
discussion : 49a3d363$0$21740$
Bonjour a tous.

Je veux modifier le poids en Ko d'une image JPG et je la sauvegarde.

si je lui donne un autre nom que celui d'origine ca fonctionne tres bien
mais si je delete la photo d(origine et enregistre cette photo sous ce
meme nom j'ai l'erreur; ce fichier est utilise par .....

que me conseillez vous pour pouvoir sous vb.net 2008 ecraser une JPG
par une autre?

D'avance merci de votre aide l

ci dessous ce qui marche car je ne lui donne pas le meme nom





Private Sub modiftaille_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles modiftaille.Click

'***************************

Dim cheminb As String = "d:essai.jpg "

Dim longd = Len(cheminb) - 4

Dim cheminbis As String = (Microsoft.VisualBasic.Left(cheminb, longd)) &
"bis.jpg"

Dim bmp1 As New Bitmap(cheminb)

Dim jgpEncoder As ImageCodecInfo = GetEncoder(ImageFormat.Jpeg)

Dim myEncoder As System.Drawing.Imaging.Encoder =
System.Drawing.Imaging.Encoder.Quality

Dim myEncoderParameters As New EncoderParameters(1)

Dim myEncoderParameter As New EncoderParameter(myEncoder, 50&)

myEncoderParameters.Param(0) = myEncoderParameter

If (File.Exists(cheminbis)) = True Then

Kill(cheminbis)

End If

bmp1.Save(cheminbis, jgpEncoder, myEncoderParameters)

' recuperer date du fichier cheminbis

FileDateTime(cheminb)

Dim dmodif = Directory.GetLastWriteTime(cheminb)

Dim dcrea = Directory.GetCreationTime(cheminb)

'Changer date du fichier ZZ

File.SetCreationTime(cheminbis, dcrea)

File.SetLastWriteTime(cheminbis, dmodif)

'*********************************

Label2.Text = "taille: " & (FileLen(totala(nbd)) / 1000) & " ko "

totala(nbd) = cheminbis

' suppression du fichier initial

If FileLen(totala(nbd)) > 0 Then

lirmedia(totala(nbd))

End If

' If (File.Exists(cheminb)) = True Then

'Kill(cheminb)

' End If

End Sub






Avatar
Dan
effectivement c'est de la que ca vient
je vais faire les tests.
Je te tiens au courant
A+
Dan
"Jérémy Jeanson" a écrit dans le message de
news:
je crois que c'est au niveau de ta méthode totala(nbd).
Retourne elle bien une String?
--
Jérémy JEANSON
MCP
http://www.jjeanson.fr