Fonctions pour images sur le serveur SQL

0000003210     -      02/04/2024

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 :

  • width
  • height

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".