VB.NET Changer les dimensions d’une image

Problématique

Il ne s’agit pas de modifier la taille apparente d’une image dans un formulaire par exemple : trop facile ! Vous ne seriez pas arrivés sur mon site aussi utile et agréable que méconnu : il y a beaucoup de réponses sur le Net et certaines sont exactes !

Non, l’objectif ici est de « prendre » un fichier image quelconque (.JPG, .GIF, .PNG, …) et de la transformer en autre de taille différente … et même de type différent si ça vous chante !

Je vous sens heureux d’être là.

Solution

C’est tout bête mais il faut le trouver. Je vous indique les variables, vous y mettez ce que vous voulez. Désolé si les commentaires sont répétitifs mais au moins les choses seront claires.

On commence par :

Dim srcImage As String ‘ path du fichier d’origine
Dim dstImage as string ‘ path du fichier destination
Dim srcBitmap As New Bitmap(srcImage) ‘ bitmap dans lequel on placera l’image d’origine
Dim srcWidth As Integer = srcBitmap.Size.Width ‘ largeur de l’image d’origine
Dim srcHeight As Integer = srcBitmap.Size.Height ‘ hauteur de l’image d’origine
Dim dstWidth as integer ‘ largeur de l’image destination

Puis, si vous ne tenez pas spécialement à garder la proportionnalité :

Dim dstHeight as integer ‘ hauteur de l’image destination
Dim destBitmap As New Bitmap(srcBitmap, dstWidth, dstHeight) ‘ bitmap dans lequel on placera l’image destination

Ou, dans le cas plus fréquent où vous souhaitez conserver les proportions de l’image :

Dim scaleFactor As Double = cdbl(dstWidth) / CDbl(srcWidth) ‘ le scale factor (coefficient de proportionnalité en français)
Dim destBitmap As New Bitmap(srcBitmap, dstWidth, CInt(srcHeight * scaleFactor)) ‘ bitmap dans lequel on placera l’image destination

Et enfin, pour sauvegarder l’image dans un nouveau format

destBitmap.Save(dstImage, System.Drawing.Imaging.ImageFormat.[type image]) ‘ [type image] peut prendre les valeurs : Gif, Icon, Jpeg, Png, …
srcBitmap.Dispose() ‘ toujours laisser un endroit aussi propre en entrant qu’on l’a trouvé en arrivant
destBitmap.Dispose() ‘ là aussi : propre, on vous dit

ET LE TOUR EST JOUÉ ! ALORS ON DIT MERCI QUI ?

POUR EN SAVOIR PLUS : les derniers livres parus sur VB.NET sont sur

DerniersParus.com » VB.NET

Mettre un sous-domaine OVH en CDN (Content Distributed Network)

Problématique

J’aime bien OVH. C’est mon fournisseur depuis quelques années. Ils ont un bon rapport qualité/prix et un support qui a toujours répondu à mes attentes. Jusqu’à récemment du moins. Donc juste une petite critique à une société que j’aime bien. L’offre CDN d’OVH est très intéressante, la nouvelle interface aussi ergonomique qu’esthétique. Mais sur le CDN la documentation est peu claire et le support un peu perdu.

Mais quel truc tordu voulais-je donc faire pour lequel j’ai eu recours au support et qui a un perturbé le support ?

Prenons l’exemple de DerniersParus.com, le poids des pages réside principalement dans les couvertures de livres. Dans ce cas, quoi de plus naturel que de placer les couvertures dans un CDN ? Quoi de plus logique que de les placer dans un sous-domaine ?

  • les couvertures d’un livre ne changent jamais (pratiquement … puisque généralement en cas de réédition, le livre bénéficie d’un nouveau code ISBN – ou EAN, le même sans les « – » -)
  • en revanche, les pages « fiches livres », « auteurs », « thématiques » ou « éditeur » sont susceptibles de changer au gré des mises à jour quotidiennes

donc il est préférable de bien séparer les éléments statiques des dynamiques et donc placer les éléments statiques dans un sous-domaine sous CDN est une solution qui s’impose.

Et là, ça se corse. La documentation CDN OVH ne précise pas clairement la marche à suivre. Vérifiez par vous-même. Si entretemps, la documentation en parle, ça prouvera que j’ai raison d’apprécier OVH car ils auront prouvé leur réactivité.

Solution

J’utilise l’interface Plesk 12 sur une serveur VPS mais la marche à suivre ne doit pas en principe dépendre de ce contexte.

Vous avez un domaine mondomaine.ext et vous souhaitez mettre le sous-domaine img.mondomaine.net en CDN.

  1. créez img.mondomaine.net en tant que sous-domaine de mondomaine.net
  2. dans les DNS de mondomaine.net apparaîtra une entrée de type : img.mondomaine.net A 123.456.789.012 (ceci étant l’IP – improbable de votre serveur)
  3. il faut remplacer cette entrée par une entrée de type CNAME : img.mondomaine.net CNAME img.mondomaine.net.web.cdn.anycast.me (l’extension .web.cdn.anycast.me étant celle du CDN OVH)
  4. ensuite vous allez paramétrer votre CDN dans l’espace dédié et vous n’avez plus besoin de moi sur le sujet car cette interface est remarquablement claire

Dernière petite précision, soyez plus patient que moi : laisser aux DNS le temps de se propager. Il faut entre 0 et 48h et vous pouvez devez tabler sur une moyenne pondérée de 12 h d’attente.

ET LE TOUR EST JOUÉ ! ALORS ON DIT MERCI QUI ?

MySQL. Récupérer rapidement une sauvegarde

Problématique

Vous utilisez phpMyAdmin, vous venez de supprimer un champ malencontreusement et avez perdu des informations précieuses. C’est arrivé aux meilleurs d’entre nous.

Si vous n’avez pas fait de sauvegarde, je ne peux rien pour vous sauf vous dire que vous ne faites effectivement pas partie des meilleurs.

Sinon c’est tout simple.

Solution

Attention la solution que je vous propose ne fonctionne que pour les tables au format MyISAM. Elle fonctionne peut-être pour les autres mais je ne les utilise pas donc je ne vous promets rien. Mais au niveau de désespoir où vous en êtes, essayez d’adapter ma solution.

Sachant que pour la table matable, il y a trois fichiers : matable.frm, matable.MYD, matable MYI

  1. renommez vos mauvais fichiers
  2. copiez les bons à partir de votre sauvegarde
  3. vous me direz que vous savez ça depuis MSDOS 1.25 (on ne rit pas, ça a existé et j’ai débuté là-dessus). Certes, certes. Mais la valeur ajoutée de mon post est ici : n’oubliez pas de redémarrer Apache et mySQL parce que phpMyAdmin conserve en mémoire la structure précédente et ne comprend pas , sinon, vos nouveau fichiers

ET LE TOUR EST JOUÉ ! ALORS ON DIT MERCI QUI ?

POUR EN SAVOIR PLUS : les derniers livres parus sur MySQL sont sur

DerniersParus.com » MySQL

MySQL. BULK UPDATE (aka grosse mise à jour)

Problématique

Vous voulez mettre tous les champs d’une table à jour à partir d’une autre table.

Vous pouvez par exemple vouloir mettre à jour une table distante à partir d’une table locale.

Vous pouvez, comme je le faisais quand j’étais petit, le faire par programme et mettre à jour ligne à ligne. Le programme n’est pas long à faire mais l’exécution …

Solution

Le mieux est de mettre les données dans une table temporaire qu’on appellera source.

La méthode généralement utilisée (parce que c’est la bonne) est la suivante :

CREATE TABLE IF NOT EXISTS source (
champ1 int(11) NOT NULL,
champ2 int(11) DEFAULT NULL,
champ3 int(11) DEFAULT NULL
)
les types de champ ne sont qu’un exemple

de la charger ensuite par un

INSERT INTO source (champ1, champ2, champ3) FROM SELECT ( …)

et d’exporter ensuite la table. Mais jusque là vous saviez tout ça.

Comment faire le BULK UPDATE ? En posant source le nom de la table … source et dest le nom de la table … dest (vous aviez deviné ?) qui sera alimentée. La commande est la suivante.

UPDATE dest  INNER JOIN source

ON dest.IDdest=source.IDsource

SET dest.champdest1=source.source1, …,  dest.champdestn=source.champsourcen

ET LE TOUR EST JOUÉ ! ALORS ON DIT MERCI QUI ?

POUR EN SAVOIR PLUS : les derniers livres parus sur MySQL sont sur

DerniersParus.com » MySQL