REDIMENSIONNEMENT DE PHOTOS PAR LOT

pguarino Messages postés 4 Date d'inscription lundi 10 septembre 2007 Statut Membre Dernière intervention 17 septembre 2007 - 17 sept. 2007 à 10:07
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 - 14 juil. 2009 à 00:27
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/44088-redimensionnement-de-photos-par-lot

gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
14 juil. 2009 à 00:27
pouvoir y ajouter une notice de copyright serait pas mal
en texte (watermarks) en image (addimg)
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.Drawing.Drawing2D
Module Module1

Public Function watermarks(ByVal Copyright As String, ByVal imgPhoto As Image) As Image
Dim phWidth As Integer = imgPhoto.Width
Dim phHeight As Integer = imgPhoto.Height 'create a Bitmap the Size of the original photograph
Dim bmPhoto As New Bitmap(phWidth, phHeight, PixelFormat.Format24bppRgb)
bmPhoto.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution)
Dim grPhoto As Graphics = Graphics.FromImage(bmPhoto) 'load the Bitmap into a Graphics object
'Dim tmp As String = My.Computer.FileSystem.GetTempFileName & ".bmp"
Dim imgWatermark As Image = New Bitmap(phWidth, phHeight) 'create a image object containing the watermark
Dim wmWidth As Integer = imgWatermark.Width
Dim wmHeight As Integer = imgWatermark.Height 'Step #1 - Insert Copyright message
grPhoto.SmoothingMode = SmoothingMode.AntiAlias 'Set the rendering quality for this Graphics object
grPhoto.DrawImage(imgPhoto, New Rectangle(0, 0, phWidth, phHeight), 0, 0, phWidth, phHeight, GraphicsUnit.Pixel) ' Units of measure
Dim sizes() As Integer = {16, 14, 12, 10, 8, 6, 4}
Dim crFont As Font = Nothing
Dim crSize As New SizeF()
For i As Integer = 0 To 6
Application.DoEvents()
crFont = New Font("arial", sizes(i), FontStyle.Bold)
'Measure the Copyright string in this Font
crSize = grPhoto.MeasureString(Copyright, crFont)
If CUShort(crSize.Width) < CUShort(phWidth) Then
Exit For
End If
Next i
Dim yPixlesFromBottom As Integer = CInt(Fix(phHeight * 0.05))
Dim yPosFromBottom As Single = ((phHeight - yPixlesFromBottom) - (crSize.Height / 2))
Dim xCenterOfImg As Single = (phWidth \ 2)
Dim StrFormat As New StringFormat()
StrFormat.Alignment = StringAlignment.Center
Dim semiTransBrush2 As New SolidBrush(Color.FromArgb(153, 0, 0, 0))
grPhoto.DrawString(Copyright, crFont, semiTransBrush2, New PointF(xCenterOfImg + 1, yPosFromBottom + 1), StrFormat)
Dim semiTransBrush As New SolidBrush(Color.FromArgb(153, 255, 255, 255))
grPhoto.DrawString(Copyright, crFont, semiTransBrush, New PointF(xCenterOfImg, yPosFromBottom), StrFormat) 'Text alignment
Dim bmWatermark As New Bitmap(bmPhoto)
bmWatermark.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution)
Dim grWatermark As Graphics = Graphics.FromImage(bmWatermark)
Dim imageAttributes As New ImageAttributes()
Dim colorMap As New ColorMap()
colorMap.OldColor = Color.FromArgb(255, 0, 255, 0)
colorMap.NewColor = Color.FromArgb(0, 0, 0, 0)
Dim remapTable() As ColorMap = {colorMap}
imageAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap)
Dim colorMatrixElements()() As Single = {New Single() {1.0F, 0.0F, 0.0F, 0.0F, 0.0F}, New Single() {0.0F, 1.0F, 0.0F, 0.0F, 0.0F}, New Single() {0.0F, 0.0F, 1.0F, 0.0F, 0.0F}, New Single() {0.0F, 0.0F, 0.0F, 0.3F, 0.0F}, New Single() {0.0F, 0.0F, 0.0F, 0.0F, 1.0F}}
Dim wmColorMatrix As New ColorMatrix(colorMatrixElements)
imageAttributes.SetColorMatrix(wmColorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap)
Dim xPosOfWm As Integer = ((phWidth - wmWidth) - 10)
Dim yPosOfWm As Integer = 10
grWatermark.DrawImage(imgWatermark, New Rectangle(xPosOfWm, yPosOfWm, wmWidth, wmHeight), 0, 0, wmWidth, wmHeight, GraphicsUnit.Pixel, imageAttributes) 'ImageAttributes Object
imgPhoto = bmWatermark
grPhoto.Dispose()
grWatermark.Dispose()
Return imgPhoto
imgPhoto.Dispose()
imgWatermark.Dispose()
End Function

'add an image to the bitmap
Public Function addImg(ByVal ibitmap As Image, ByVal imagename As String, ByVal ILeft As Integer, ByVal ITop As Integer) As Boolean
Dim i As Image = Image.FromFile(imagename)
Dim g As Graphics = Graphics.FromImage(ibitmap)
g.DrawImage(i.Clone, ILeft, ITop, i.Width, i.Height)
g.Dispose()
i.Dispose()
End Function

End Module
absolute13 Messages postés 2 Date d'inscription jeudi 4 novembre 2004 Statut Membre Dernière intervention 7 janvier 2009
7 janv. 2009 à 16:44
Pour redimensionner des photos rien de mieux que

http://www.imresize.com
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
6 oct. 2008 à 08:54
Bravo et merci.
J'ai pu réduire des photos pour mettre dans un diapo PowerPoint destiné au web.Ex:photo de 2,14 Mo = 138 Ko
Ce qui fait un diapo de 38 photos à 4,8Mo c'est pas mal et cela en 2 temps 3 mouvements. Pour cette configuration c'est super.
Bonne continuation dans tes programmes
@+ Le Pivert
cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010
26 sept. 2008 à 15:52
Maj, les critères de résolution finale sont respectés par la langue française! Ainsi le petit côté est vraiment à la taille choisie et non plus la hauteur comme ca l'était auparavant. Il en va de même pour le grand côté.
cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010
29 août 2008 à 02:13
Merci, content que ca serve. Je vais améliorer cette source..avant de me relancer dans mon projet c++, fini le vb, du moins pour quelque temps xD.
Vbete Messages postés 3 Date d'inscription jeudi 28 août 2008 Statut Membre Dernière intervention 26 juillet 2013
28 août 2008 à 21:53
C'est Fait ... :-)
Vbete Messages postés 3 Date d'inscription jeudi 28 août 2008 Statut Membre Dernière intervention 26 juillet 2013
28 août 2008 à 21:52
Je dois avouer que j'étais dans une galère :
Je devais redimentionner toutes les images "large" de mon site web en 500 minimum sur le plus grand coté (soit environ 900 images à retravailler + 60 nouvelle par semaine).
Je me suis dit : qu'à cela ne tienne, je vais en profiter pour me remettre au graphique sous vb.net et puis je suis tombé sur cette source, qui ma permis de gagner 1/2 journée de travail !!! (et vu mes horaires de fou, cela veut dire 1 journée pour d'autres).

Mes adaptations perso seront les suivantes :

- Automatisation via fichier de config afin que les dossiers source et cible, ainsi que la dimension soient positionnés par défaut et que le traitement se lance automatiquement après le form_load)

- Prise en compte de l'existence ou non du fichier dans le répertoire cible (en effet, certaines étant sur fond noir, elles doivent être détourée pour être fonctionelles et je ne veux donc pas qu'elles soients écrasées par une nouvelle version générée automatiquement)

- Génération d'un fichier de log avec inscription dans l'observateur d'événements du nombre de nouvelles images crées ou d'une anomalie éventuelle, afin de pouvoir suivre au jour le jour les traitements gérés au travers des tâches planifiées.

Si quelqu'un est interessé, je me permetrai d'apporter ma contribution à ce post au travers de son auteur.

En tout cas, je mets 9/10 car sinon, je n'aurai jamais pu prendre le temps d'écrire ça.

Merci
cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010
16 juil. 2008 à 21:05
Merci ^^
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
16 juil. 2008 à 18:22
BONNES VACANCES
cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010
16 juil. 2008 à 18:17
Oui effectivement seulement je pars vendredi matin en vacances. Je ne vais pas m'y attaquer pour l'instant.
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
16 juil. 2008 à 16:09
tu pourrais accepter tous les formats en entrée et mettre une option qui les transforme en jpeg en sortie!
comme ton prog est bien pour faire une galerie de photos
(thumbnails) tu pourrais ajouter du code qui fasse une page html avec toutes les images dedans et que chaque thumb pointe vers l'image d'origine (utile pour faire un site avec plein d'images)
cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010
16 juil. 2008 à 15:19
A wé mais vu que la source c'était pour mettre des photos sur un baladeur Mp4, le jpeg semble très bien disposé à ce genre d'appareil^^ mais pourquoi pas je verrais ce soir..
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
16 juil. 2008 à 14:13
et les autres formats, ils sonts punis, ils ne peuvent pas jouer avec?? une fois !
cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010
16 juil. 2008 à 14:05
Voila on peut traiter les sous dossiers ou non et convertir les fichier png bmp gif en jpeg tout en diminuant la définition.
cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010
16 juil. 2008 à 13:15
C'est fait
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
15 juil. 2008 à 15:23
bon boulot,
très pratique pour générer des thumbnails quand on a 5000 images à traiter
je donne 8/10
il faudrait une option pour donner le choix de traiter les sous répertoires !
cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010
15 juil. 2008 à 14:59
Ca y est
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
12 juil. 2008 à 18:27
manque des fichiers dans ton zip
le repertoire "My Project" est absent et celui la il est important ,
pas comme "bin" que tu as laissé.
j'attends que tu repostes un zip complet pour noter !
cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010
17 sept. 2007 à 18:06
Anvert : tout y est, tu n'as pas a créer de nouveaux projets.
cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010
17 sept. 2007 à 18:04
Ben ca y est déjà.. ? Il y a deux textboxs pour. L'une pour le dossier à traiter, l'autre pour enregistrer les photos traitées.
pguarino Messages postés 4 Date d'inscription lundi 10 septembre 2007 Statut Membre Dernière intervention 17 septembre 2007
17 sept. 2007 à 11:33
C'est bon je l'ai trouvé, et ca marche très bien.
Petite suggestion : Ce serait pratique de pouvoir choisir le repertoire d'enregistrement des images traitées...
Mais bravo tout de meme.
anvert Messages postés 12 Date d'inscription mardi 11 mars 2003 Statut Membre Dernière intervention 17 septembre 2007
17 sept. 2007 à 10:13
STP, pourrais-tu joindre tous les fichiers de ton répaertoire pour éviter d'avoir à recréer un nouveau projet et d'y intégrer ta form?
pguarino Messages postés 4 Date d'inscription lundi 10 septembre 2007 Statut Membre Dernière intervention 17 septembre 2007
17 sept. 2007 à 10:07
Désolé mais je ne trouve pas le code !
Rejoignez-nous