Mercator propose via les fonctionnalités CLR des fonctions permettant de manipuler les images sur le serveur SQL. Les fonctions disponibles sont :
- Fonction scalaire : RESIZE_IMAGE(@bytes varbinary(max), @width int, @height int)
- Fonction scalaire : RESIZE_IMAGE_SAFE(@bytes varbinary(max), @width int, @height int)
- Fonction table : IMAGE_SIZE(@bytes varbinary(max))
Les deux premières fonctions permettent de redimensionner une image. Elles renvoient un varbinary(max). Les paramètres @width et @height permettent de passer la taille maximale souhaitée. Si l'image s'inscrit dans ce rectangle, elle n'est pas redimensionnée. Dans le cas contraire, elle est redimensionnée en respectant le ratio largeur / longueur.
RESIZE_IMAGE produit une erreur si le varbinary(max) ne contient pas une image, mais un autre type de fichier. Contrairement à RESIZE_IMAGE_SAFE qui renverra dans ce cas les bytes reçus initialement.
Exemple d'utilisation :
update FILES set filecontent=dbo.RESIZE_IMAGE_SAFE(filecontent, 500, 500) where ...
La fonction IMAGE_SIZE permet de récupérer la taille d'une image stockée dans une colonne varbinary(max). Elle renvoie une table avec un seul record et les colonnes suivantes de type int :
Exemple d'utilisation :
select top 10 filename,t.width,t.height from FILES cross apply dbo.IMAGE_SIZE(filecontent) t where right(rtrim(filename),4)='.png'
Ces fonctionnalités requièrent au minimum la version 1.0.16.0 de MercatorSqlClr.dll. Cette version peut être vérifiée dans les informations système du menu "Outils" ou via cette requête :
select dbo.MERCATOR_CLR_VERSION()
Si cet assembly est antérieur, il faut exécuter "Outils Avancés > Base de Données SQL > Fonctions SQL CLR > Mettre à Jour".