Il semble que le regexp est erroné. Voilà pourquoi je l'ai écrit un petit programme C pour le faire pour moi:
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 1048576
char stuff[MAX_SIZE];
int main (int argc, char **argv)
{
unsigned int j_off, j_len, p_off, p_len;
FILE *fp, *jp, *pp;
fp = fopen (argv[1], "r");
if (!fp) goto error;
if (fseek (fp, 12, SEEK_SET)) goto error;
if (!fread (&j_off, 4, 1, fp)) goto error;
if (!fread (&j_len, 4, 1, fp)) goto error;
if (!fread (&p_off, 4, 1, fp)) goto error;
if (!fread (&p_len, 4, 1, fp)) goto error;
fprintf (stderr, "INFO %s \t%d %d %d %d\n",
argv[1], j_off, j_len, p_off, p_len);
if (j_len > MAX_SIZE || p_len > MAX_SIZE) {
fprintf (stderr, "%s: Chunk size too big!\n", argv[1]);
return EXIT_FAILURE;
}
jp = fopen (argv[2], "w");
if (!jp) goto error;
if (fseek (fp, j_off, SEEK_SET)) goto error;
if (!fread (stuff, j_len, 1, fp)) goto error;
if (!fwrite (stuff, j_len, 1, jp)) goto error;
fclose (jp);
pp = fopen (argv[3], "w");
if (!pp) goto error;
if (fseek (fp, p_off, SEEK_SET)) goto error;
if (!fread (stuff, p_len, 1, fp)) goto error;
if (!fwrite (stuff, p_len, 1, pp)) goto error;
fclose (pp);
fclose (fp);
return EXIT_SUCCESS;
error:
perror (argv[1]);
return EXIT_FAILURE;
}
Il fonctionne avec les paramètres de ligne de commande input.hpi output.jpg output.png. La gestion des erreurs n'est pas correcte à 100%, mais elle est suffisante pour toujours vous dire si quelque chose ne va pas, et la plupart du temps ce que c'est. Pour les fichiers volumineux, vous devrez agrandir MAX_SIZE.
Voici un script shell que vous pouvez appeler avec * .hpi:
#!/bin/bash
dest=<destination-folder>
for arg in "[email protected]"
do
base=`echo $arg | cut -d'.' -f1`
<executable> $arg $dest/original/$base.jpg $dest/mask/$base.png 2>>$dest/log
#composite -compose CopyOpacity $dest/mask/$base.png $dest/original/$base.jpg $dest/rgba/$base.png
done
La commande composite en option (est livré avec ImageMagick) va créer une nouvelle image PNG qui a le masque appliqué comme canal alpha. Notez que ce fichier sera environ 5 fois plus grand que les fichiers d'origine.
Notez que certains fichiers HPI sont sans masque. Dans ce cas, mon programme fonctionnera toujours, mais donne un fichier PNG vide.
fonctionne très bien! J'ai hâte de revenir à 2001 avec 50 000 images de personnes à grosse tête qui me dévisagent. – Owen
Wow moyen d'aller le mile supplémentaire –
Je l'ai utilisé pour trois DVD de données plein de plus de 150 000 images. – ypnos