Multimédia
L’API IMu fournit un certain nombre de mécanismes permettant de gérer l’accès aux multimédias stockés dans le système de gestion de base de données (SGBD) EMu. Ces mécanismes se répartissent en trois grandes catégories :
- Mécanismes permettant de sélectionner les enregistrements du module Multimédia associés à un autre module. Ce sujet est abordé dans la section Fichiers joints multimédias.
- Mécanismes permettant de sélectionner des fichiers multimédia à partir d’un enregistrement du module Multimédia. Ce sujet est abordé dans les sections Fichiers multimédia et Filtres.
- Mécanismes permettant d’appliquer des modifications à des fichiers multimédia. Ce sujet est abordé dans la section Modificateurs.
Il est important de noter qu’un seul enregistrement du SGBD EMu peut être associé à plusieurs enregistrements du module Multimédia. Chaque enregistrement du module Multimédia peut être associé à plusieurs fichiers multimédia. Les mécanismes distincts de gestion de l’accès au multimédia peuvent être combinés de manière à permettre, par exemple :
- Sélectionnez un enregistrement du module Multimédia spécifique parmi un groupe d’enregistrements du module Multimédia associés.
- Sélectionnez un fichier multimédia spécifique dans l’enregistrement du module Multimédia sélectionné.
- Appliquez une modification au fichier multimédia sélectionné.
Les informations sur le multimédia joint à un enregistrement EMu de n’importe quel module (sauf le module Multimédia lui-même) peuvent être récupérées à l’aide de la méthode de classe IMu::Module fetch en spécifiant l’une des colonnes virtuelles suivantes.
Les colonnes virtuelles suivantes renvoient des informations sur un seul fichier multimédia joint à l’enregistrement en cours. L’information est renvoyée sous la forme d’une référence à une table de hachage :
- application
- audio
- image
- video
Les colonnes virtuelles suivantes renvoient des informations sur un ensemble de fichiers multimédias joints de l’enregistrement en cours. L’information est renvoyée sous la forme d’une référence à un tableau. Chaque membre du tableau est une référence à une table de hachage contenant les informations pour un seul fichier joint multimédia de l’ensemble :
- applications
- audios
- images
- multimedia
- videos
Toutes ces colonnes virtuelles renvoient les irn, type et format de l’enregistrement Multimédia joint à l’enregistrement en cours. Ils servent également de colonnes de référence pour le module Multimédia. Cela signifie que d’autres colonnes du module Multimédia (y compris colonnes virtuelles) peuvent également être demandées à partir de l’enregistrement Multimédia correspondant, par exemple :
- Inclure le titre de tous les multimédias joints :
multimedia. MulTitle
- Inclure le titre de toutes les images jointes :
images. MulTitle
- Incluez des détails sur le fichier multimédia principal pour toutes les images jointes (en utilisant la colonne virtuelle master du module Multimédia) :
images.master
- Inclure plusieurs colonnes pour toutes les images jointes :
images. (master,MulTitle,MulDescription)
- Inclure et renommer plusieurs colonnes pour toutes les images jointes :
images. (master,title=MulTitle,description=MulDescription)
Exemple
Cet exemple montre la récupération des informations de base et du titre pour toutes les images multimédia jointes à un enregistrement Personnes / Organisations :
my $columns = [ 'images.MulTitle' ]; my $result = $parties->fetch('start', 0, 1, $columns); foreach my $row (@{$result->{'rows'}}) { foreach my $image (@{$row->{'images'}}) { my $irn = $image->{'irn'}; my $type = $image->{'type'}; my $format = $image->{'format'}; my $title = $image->{'MulTitle'}; printf("irn %d: %s - %s/%s\n", $irn, $title, $type, $format); } }
Cela génère des résultats similaires à ceux qui suivent :
irn 100105: Signature of Luciano Pavarotti - image/jpeg
irn 100096: Luciano Pavarotti - image/gif
irn 100100: Luciano Pavarotti with Celine Dion - image/gif
irn 100101: Luciano Pavarotti with Natalie Cole - image/gif
irn 100102: Luciano Pavarotti with the Spice Girls - image/gif
De même, les informations sur les fichiers multimédias associés à un enregistrement du module Multimédia peuvent être récupérées en utilisant la méthode de classe IMu::Module fetch en spécifiant l’une des colonnes virtuelles suivantes.
Les colonnes virtuelles suivantes renvoient des informations sur un seul fichier multimédia à partir de l’enregistrement Multimédia en cours. L’information est renvoyée sous la forme d’une référence à une table de hachage :
- master
- resource
- thumbnail
Les colonnes virtuelles suivantes renvoient des informations sur un ensemble de fichiers multimédia de l’enregistrement Multimédia en cours. L’information est renvoyée sous la forme d’une référence à un tableau. Chaque membre du tableau est une référence à une table de hachage contenant les informations d’un seul fichier multimédia de l’ensemble :
- resolutions
- resources
- supplementary
Les colonnes virtuelles master (principal), thumbnail (vignette), resolutions (résolutions) et supplementary (supplémentaires) renvoient toutes le même type d’informations. Ces informations diffèrent selon qu’il s’agit de multimédias image ou de multimédias non image, comme suit :
Pour les multimédias non image, ils renvoient :
|
Retourne |
Détails |
|---|---|
|
fileSize |
La taille du fichier en octets. |
|
identifier |
Le nom du fichier multimédia. |
|
index |
Un entier qui indique la position du fichier multimédia dans la liste des fichiers multimédias principal, vignette, résolutions et supplémentaires, dans cet ordre, numérotés à partir de 0. |
|
kind |
Le type (master, thumbnail, resolution, ou supplementary) du multimédia. |
|
md5Checksum |
La somme de contrôle MD5 du fichier multimédia. |
|
md5Sum |
Identique à md5Checksum (inclus pour assurer la rétrocompatibilité). |
|
mimeFormat |
Le format du média. |
|
mimeType |
Le type de média. |
|
size |
Identique à fileSize (inclus pour assurer la rétrocompatibilité). |
Pour les multimédias image, elles renvoient toutes les valeurs spécifiées pour les multimédias non image et incluent également :
|
Retourne |
Détails |
|---|---|
|
bitsPerPixel |
La profondeur de couleur de l’image. |
|
colourSpace |
L’espace colorimétrique de l’image. |
|
compression |
Le type de compression utilisé pour l’image. |
|
height |
La hauteur de l'image en pixels. |
|
imageType |
La classification de type de l’image. Par exemple :
Vous trouverez de plus amples informations ici. |
|
numberColours |
Le nombre de couleurs présentes dans l’image. |
|
numberPages |
Nombre d’images contenues dans l’image principale — fonctionnalité prise en charge uniquement par certains types de fichiers, par exemple les fichiers TIFF. |
|
planes |
Le nombre de plans dans une image. |
|
quality |
Une valeur entière comprise entre 1 et 100 qui indique la qualité de l’image. Une valeur plus faible indique une qualité d’image inférieure et une compression plus élevée, tandis qu’une valeur plus élevée indique une qualité d’image supérieure mais une compression plus faible. Applicable uniquement aux formats d’image JPEG et MPEG. |
|
resolution |
La résolution de l’image en PPI (pixels par pouce). |
|
width |
La largeur de l'image en pixels. |
Les colonnes virtuelles resource et resources renvoient toutes deux le même type d’informations, comme suit :
|
Retourne |
Détails |
|---|---|
|
identifier |
Le nom du fichier multimédia. |
|
mimeType |
Le type de média. |
|
mimeFormat |
Le format du média. |
|
size |
La taille du fichier en octets. |
|
|
|
|
height |
La hauteur de l'image en pixels. |
|
width |
La largeur de l'image en pixels. |
Cet exemple montre la récupération du titre multimédia et des informations sur les ressources de tous les fichiers multimédias pour toutes les images multimédias jointes à un enregistrement Personnes / Organisations :
my $columns = [ 'images.(MulTitle,resources)', ]; my $result = $parties->fetch('start', 0, 1, $columns); foreach my $row (@{$result->{'rows'}}) { foreach my $image (@{$row->{'images'}}) { my $irn = $image->{'irn'}; my $type = $image->{'type'}; my $format = $image->{'format'}; my $title = $image->{'MulTitle'}; printf("irn %d: %s - %s/%s\n", $irn, $title, $type, $format); foreach my $resource (@{$image->{'resources'}}) { my $height = $resource->{'height'}; my $identifier = $resource->{'identifier'}; my $mimeFormat = $resource->{'mimeFormat'}; my $mimeType = $resource->{'mimeType'}; my $size = $resource->{'size'}; my $width = $resource->{'width'}; printf(" %s: %s/%s - %dx%d - %d bytes\n", $identifier, $mimeType, $mimeFormat, $height, $width, $size); } print("\n"); } }
Cela génère des résultats similaires à ceux qui suivent :
irn 100105: Signature of Luciano Pavarotti - image/jpeg
signature.jpg: image/jpeg - 85x300 - 6535 bytes
signature.thumb.jpg: image/jpeg - 25x90 - 1127 bytes
irn 100096: Luciano Pavarotti - image/gif
LucianoPavarotti.gif: image/gif - 400x273 - 19931 bytes
LucianoPavarotti.thumb.jpg: image/jpeg - 90x61 - 1354 bytes
LucianoPavarotti.300x300.jpg: image/jpeg - 300x205 - 41287 bytes
irn 100100: Luciano Pavarotti with Celine Dion - image/gif
PavarottiWithCelineDion.gif: image/gif - 400x381 - 66682 bytes
PavarottiWithCelineDion.thumb.jpg: image/jpeg - 90x85 - 2393 bytes
PavarottiWithCelineDion.300x300.jpg: image/jpeg - 300x286 - 76091 bytes
irn 100101: Luciano Pavarotti with Natalie Cole - image/gif
PavarottiWithNatalieCole.gif: image/gif - 251x400 - 44551 bytes
PavarottiWithNatalieCole.thumb.jpg: image/jpeg - 56x90 - 1768 bytes
PavarottiWithNatalieCole.300x300.jpg: image/jpeg - 188x300 - 49698 bytes
irn 100102: Luciano Pavarotti with the Spice Girls - image/gif
PavarottiWithSpiceGirls.gif: image/gif - 326x400 - 64703 bytes
PavarottiWithSpiceGirls.thumb.jpg: image/jpeg - 73x90 - 2294 bytes
PavarottiWithSpiceGirls.300x300.jpg: image/jpeg - 245x300 - 65370 bytes
Les octets réels du fichier multimédia sont accessibles à l’aide de l’objet IO:File contenu dans la valeur file renvoyée par les colonnes virtuelles resource ou resources. Nous pouvons utiliser l’objet IO:File pour copier le fichier depuis le serveur IMu :
my $columns = [ 'image.resource', ]; my $result = $parties->fetch('start', 0, 1, $columns); foreach my $row (@{$result->{'rows'}}) { my $image = $row->{'image'}; my $resource = $image->{'resource'}; my $name = $resource->{'identifier'}; my $temp = $resource->{'file'}; my $copy = IO::File->new($name, '>'); my $buffer; my $offset = 0; while (1) { # read 4K at a time my $length = $temp->sysread($buffer, 4096, $offset); if ($length == 0) { last; } $copy->syswrite($buffer, $length, $offset); $offset += $length; } $copy->close(); }
Cela copie le fichier multimédia du serveur IMu vers un fichier local du même nom, dans ce cas signature.jpg :
Bien que les colonnes virtuelles du module Multimédia offrent un moyen assez précis de sélectionner des fichiers multimédias spécifiques associés à un enregistrement multimédia, il peut parfois être utile de disposer d’un contrôle encore plus fin sur la sélection de ces fichiers, notamment lors de la spécification des colonnes virtuelles resolutions, resources ou supplementary.
Les filtres permettent de sélectionner des fichiers multimédias spécifiques associés à un enregistrement multimédia en fonction de certaines caractéristiques de ces fichiers. Les filtres se composent de trois éléments : un nom, un opérateur et une valeur. Ils sont spécifiés entre parenthèses après une colonne virtuelle :
colonne(nomopérateurvaleur)
Il est possible de spécifier plusieurs valeurs en séparant chaque filtre par une virgule :
colonne(nomopérateurvaleur, nomopérateurvaleur)
- nom
Le nom du filtre indique la caractéristique du fichier multimédia à utiliser comme critère de filtrage. Sauf indication contraire, la signification des noms de filtres est celle définie dans la section Fichiers multimédia.
Les noms de filtres suivants peuvent être utilisés pour filtrer n’importe quel fichier multimédia :
fileSize(ousize)heightidentifierindexkindmimeFormat(ouformat)mimeType(outype)width
Les noms de filtres suivants peuvent être utilisés pour filtrer les fichiers multimédias image :
bitsPerPixelcolourSpacecompressionimageTypemd5Checksum(oumd5sum)numberColoursnumberPagesplanesqualityresolution
Le nom de filtre suivant peut être utilisé pour filtrer les fichiers multimédias supplémentaires :
-
usageLa valeur de la colonne Utilisation des attributs supplémentaire (SupUsage_tab).
-
opérateur
L’opérateur précise la relation entre la valeur du filtre
valueet la caractéristique du fichier multimédia spécifiée par le filtrename.Les valeurs disponibles sont :
Valeur
Nom
Détails
==égal à
Sélectionne les fichiers multimédias pour lesquels la caractéristique spécifiée par le filtre
namecorrespond à la valeur du filtrevalue.!=différent de
Sélectionne les fichiers multimédias pour lesquels la caractéristique spécifiée par le filtre
namene correspond pas à la valeur du filtrevalue.<inférieur à
Sélectionne les fichiers multimédias pour lesquels la caractéristique spécifiée par le filtre
nameest inférieure à la valeur du filtrevalue. Ne s’applique qu’aux valeurs numériques.>supérieur à
Sélectionne les fichiers multimédias pour lesquels la caractéristique spécifiée par le filtre
nameest supérieure à la valeur du filtrevalue. Ne s’applique qu’aux valeurs numériques.<=inférieur ou égal à
Sélectionne les fichiers multimédias pour lesquels la caractéristique spécifiée par le filtre
nameest inférieure ou égale à la valeur du filtrevalue. Ne s’applique qu’aux valeurs numériques.>=supérieur ou égal à
Sélectionne les fichiers multimédias pour lesquels la caractéristique spécifiée par le filtre name est supérieure ou égale à la valeur du filtre value. Ne s’applique qu’aux valeurs numériques.
@le plus proche de
Sélectionne le fichier multimédia unique dont la caractéristique spécifiée par le filtre
nameest la plus proche de la valeur du filtrevalue. Ne s’applique qu’aux valeurs numériques.^le plus proche mais supérieur à
Sélectionne le fichier multimédia unique pour lequel la caractéristique spécifiée par le filtre
nameest la plus proche de la valeur du filtrevaluetout en lui étant supérieure. Ne s’applique qu’aux valeurs numériques. - valeur
La valeur à utiliser comme critère de filtrage. N’importe quelle valeur peut être utilisée, mais seules certaines valeurs ont un sens pour chaque filtre. Par exemple, si le filtre
fileSizeest utilisé, seul unvaluenumérique a du sens. De même, si le filtremimeTypeest utilisé, seul unvaluetextuel correspondant à un type MIME valide a du sens.
Par exemple :
- Sélectionnez les résolutions multimédia dont la largeur est supérieure à 300 pixels :
resources(width @ 600)
- Sélectionnez la ressource multimédia unique dont la largeur est la plus proche de 600 :
resources(width @ 600)
- Sélectionnez la ressource miniature :
resources(kind == thumbnail)
- Spécifiez plusieurs filtres pour sélectionner la ressource multimédia unique dont la largeur et la hauteur sont les plus proches de 600 :
resources(width @ 600, height @
Cet exemple montre la récupération du titre multimédia et des informations sur la ressource du fichier multimédia unique dont la largeur est la plus proche de 300 pour toutes les images multimédia jointes à un enregistrement Personnes / Organisations :
my$columns = [ 'images.(MulTitle,resources(width @ 300))', ]; my$result = $parties->fetch('start', 0, 1, $columns); foreach my$row (@{$result->{'rows'}}) { foreach my$image (@{$row->{'images'}}) { my$irn = $image->{'irn'}; my$type = $image->{'type'}; my$format = $image->{'format'}; my$title = $image->{'MulTitle'}; printf("irn %d: %s - %s/%s\n", $irn, $title, $type, $format); foreach my$resource (@{$image->{'resources'}}) { my$height = $resource->{'height'}; my$identifier = $resource->{'identifier'}; my$mimeFormat = $resource->{'mimeFormat'}; my$mimeType = $resource->{'mimeType'}; my$size = $resource->{'size'}; my$width = $resource->{'width'}; printf(" %s: %s/%s - %dx%d - %d bytes\n", $identifier, $mimeType, $mimeFormat, $height, $width, $size); } print("\n"); } }
Note: La seule différence par rapport à l’exemple précédent réside dans l’ajout d’un filtre sur la colonne virtuelle ressources Multimédia.
Cela génère des résultats similaires à ceux qui suivent :
irn 100105: Signature of Luciano Pavarotti - image/jpeg
signature.jpg: image/jpeg - 85x300 - 6535 bytes
irn 100096: Luciano Pavarotti - image/gif
LucianoPavarotti.gif: image/gif - 400x273 - 19931 bytes
irn 100100: Luciano Pavarotti with Celine Dion - image/gif
PavarottiWithCelineDion.300x300.jpg: image/jpeg - 300x286 - 76091 bytes
irn 100101: Luciano Pavarotti with Natalie Cole - image/gif
PavarottiWithNatalieCole.300x300.jpg: image/jpeg - 188x300 - 49698 bytes
irn 100102: Luciano Pavarotti with the Spice Girls - image/gif
PavarottiWithSpiceGirls.300x300.jpg: image/jpeg - 245x300 - 65370 bytes
Bien que l’API IMu offre plusieurs moyens de sélectionner des fichiers multimédias spécifiques à partir d’un enregistrement multimédia, il arrive parfois qu’aucun des fichiers disponibles ne réponde aux critères requis. Il est parfois nécessaire de modifier un fichier multimédia existant pour obtenir le résultat souhaité.
Les modificateurs permettent de convertir de différentes manières les images multimédias renvoyées par le serveur IMu. Les modifications sont effectuées à la volée et n’affectent pas les fichiers multimédias stockés dans la base de données Multimédia ; elles s’appliquent uniquement à la copie temporaire des fichiers multimédias renvoyés par l’API IMu. Les modificateurs se composent de deux éléments : un nom et une valeur séparés par deux points. Ils sont spécifiés entre accolades après une colonne virtuelle resource ou resources :
colonne{nom:valeur}
Il est possible de spécifier plusieurs valeurs en séparant chaque filtre par une virgule :
colonne{nom:valeur, nom:valeur}
Des modificateurs peuvent également être spécifiés après un filtre :
colonne(...){nom:valeur}
Les valeurs prises en charge pour name sont les suivantes :
|
Valeur |
Détails |
|---|---|
checksum
|
Ajouter une valeur de somme de contrôle à la réponse de la colonne virtuelle resource (ou resources). Bien que cela n’entraîne aucune modification du fichier multimédia, cette option est utile lorsque vous avez besoin d’une somme de contrôle pour un fichier multimédia auquel un modificateur a été appliqué (cf. fichier multimédia d’origine). Les éléments Lorsque le modificateur |
|
|
Spécifie que les octets réels du multimédia (accessibles via la valeur file de la réponse de la colonne virtuelle resource ou resources) doivent être encodés. Par défaut, ils sont renvoyés sous forme de données binaires brutes. Les éléments
|
|
|
Spécifie que le fichier multimédia doit être converti au format spécifié. Si le fichier multimédia n’est pas déjà au format requis, il est reformaté à la volée. Le serveur IMu utilise ImageMagick pour traiter les images et prend en charge un très large éventail de formats. La liste complète est disponible à l'adresse suivante : http://www.imagemagick.org/script/formats.php. N’importe lequel des formats pris en charge peut être utilisé comme value de ce modificateur. |
|
|
Spécifie qu’un descripteur de fichier multimédia doit être renvoyé. Les éléments
|
|
|
Spécifie que le fichier image multimédia doit être redimensionné à la hauteur spécifiée (en pixels). Si l’enregistrement Multimédia contient une résolution correspondant à cette hauteur, c’est cette résolution qui est renvoyée à la place (c’est-à-dire qu’aucune modification n’est appliquée). Sinon, la résolution supérieure la plus proche est redimensionnée à la hauteur demandée à la volée. Les éléments |
|
|
Spécifie que le fichier image multimédia doit être redimensionné à la largeur spécifiée (en pixels). Si l’enregistrement Multimédia contient une résolution correspondant à cette largeur, c’est cette résolution qui est renvoyée à la place (c’est-à-dire qu’aucune modification n’est appliquée). Sinon, la résolution supérieure la plus proche est redimensionnée à la largeur demandée à la volée. Les éléments |
|
|
Détermine si le rapport d’aspect de l’image doit être conservé lorsque les modificateurs Les éléments
|
Note: Les modificateurs ne s’appliquent actuellement qu’aux multimédias image et ne peuvent être spécifiés qu’après les colonnes virtuelles resource ou resources du module Multimédia.
Seules les parties resource ou resources des résultats renvoyés sont affectées par les modificateurs. Par conception, toutes les autres parties de la réponse contiennent les informations relatives au multimédia d’origine non modifié.
Par exemple :
- Spécifiez un modificateur d’encodage Base64 :
resource{encoding :base64}
- Inclure une somme de contrôle CRC32 dans la réponse :
resource{checksum :crc32}
- Reformatez l’image multimédia au format GIF :
resource{format :gif}
- Redimensionnez l’image multimédia à une hauteur de 300 pixels :
resource{height :300}
- Redimensionnez l’image multimédia à une largeur de 300 pixels :
resource{width :300}
- Redimensionnez l’image multimédia à une hauteur et une largeur de 300 pixels sans conserver le rapport d’aspect :
resource{height :300, width :300, aspectratio :no}
La modification d’un fichier multimédia est coûteuse en ressources informatiques ; elle ne doit être effectuée qu’en cas d’absolue nécessité. Par exemple, il est préférable d’utiliser le mécanisme de filtrage pour sélectionner des fichiers multimédias image ayant les dimensions souhaitées plutôt que de les modifier pour les adapter :
Bon :
resource(height @ 300, width @ 300)
Moins bon :
resource{height:300, width:300)
Cela ne fonctionne toutefois que si vous disposez de résolutions d’image proches des dimensions souhaitées.
La modification d’un fichier multimédia image dont les dimensions sont plus proches de celles souhaitées est moins coûteuse en ressources informatiques que celle d’une image plus grande ; il est donc préférable de sélectionner l’image appropriée avant de la modifier :
Bon :
resource(height ^ 299, width ^ 299){height:300, width:300}
Moins bon :
resource{height:300, width:300}
Cet exemple montre la récupération du titre multimédia et l’application de modificateurs format, width et height aux informations sur la ressource de l’image multimédia principale jointe à un enregistrement Narrations :
my$terms = IMu::Terms->new(); $terms->add('NarTitle', 'Angus Young'); my$hits = $narratives->findTerms($terms); my$columns = [ 'image.(MulTitle, resource{format:jpeg, height:600, width:600, checksum:md5})', ]; my$result = $narratives->fetch('start', 0, 1, $columns); foreach my$row (@{$result->{'rows'}}) { my$image = $row->{'image'}; my$irn = $image->{'irn'}; my$type = $image->{'type'}; my$format = $image->{'format'}; my$title = $image->{'MulTitle'}; printf("irn %d: %s - %s/%s\n", $irn, $title, $type, $format); my$resource = $image->{'resource'}; my$height = $resource->{'height'}; my$identifier = $resource->{'identifier'}; my$mimeFormat = $resource->{'mimeFormat'}; my$mimeType = $resource->{'mimeType'}; my$size = $resource->{'size'}; my$width = $resource->{'width'}; my$checksum = $resource->{'checksum'}; printf(" %s: %s/%s - %dx%d - %d bytes - %s\n", $identifier, $mimeType, $mimeFormat, $height, $width, $size, $checksum); }
Cela génère des résultats similaires à ceux qui suivent :
irn 165: Angus Young, AC/DC Jacket - image/tiff
00033320.jpeg: image/jpeg - 599x401 - 77396 bytes - d94a9f46bd6274bcd20154bc513cf61f
Les octets du multimédia modifié sont accessibles de la manière habituelle via la valeur file de la réponse de la ressource.
Note
- Seule la partie de la réponse de la ressource a été affectée par le modificateur. La partie de la réponse image indique toujours que le format est tiff. C'est intentionnel.
- Comme les proportions de l’image ont été conservées, celle-ci ne présente pas exactement la hauteur et la largeur spécifiées.

