Je travaille sur un programme qui crée des vignettes des images JPEG à la volée. Maintenant, je pensais: puisque une image JPEG est construite à partir de 8x8 pixels blocs ( Wikipedia a une excellente explication < / a>), serait-il possible de sauter une partie du décodage? p>
Disons que mes vignettes sont au moins 8 fois plus petites que l'image d'origine. Nous pourrions alors cartographier chaque bloc 8x8 dans le fichier d'entrée sur 1 pixel dans la sortie de décodage, en incluant uniquement la durée constante de la transformation de cosinus discrète. La plupart des données d'image peuvent être supprimées immédiatement et ne doivent pas être traitées. De plus, l'utilisation de la mémoire est réduite d'un facteur de 64. P>
Je ne veux pas mettre en œuvre cela à partir de zéro; ça va facilement prendre une semaine. Y a-t-il un code là-bas qui peut faire cela? P>
Si non, est-ce parce que cette approche n'est pas la peine, ou simplement parce que personne n'a pensé à ce sujet? P>
3 Réponses :
Je pense que La fonctionnalité de DJPEG fait quelque chose comme ça. P>
Il peut édifier un bloc 8x8 à une taille comprise entre 1 et 16 pixels. P>
"Ceci est intéressant car une sortie de taille spatiale différente peut être extraite directement à partir des données JPEG (DCT) sans décodage complet et rééchantillonnage spatial distinct." P>
Exactement ce que je cherchais, et c'est aussi dans une bibliothèque grand public agréée. Merci!
Le projet sur lequel je travaille actuellement utilise actuellement imagegen qui fait toutes sortes de Image Redimensionnement à la volée - Cela peut payer pour lui-même si la liste des fonctionnalités correspond à ce que vous voulez. Sinon, je suppose que vous souhaitez implémenter une compression de fichiers pertinente sur des images, qui doivent em> ont été effectuées avant! p>
Selon Cette réponse , EPEG de l'illumination a fait exactement cela, en collectant les coefficients DCT à l'échelle du Image en panne d'un facteur de 8. Voici le Accueil actuel d'EPEG . < / p>
J'aimerais pouvoir accepter deux réponses, mais Hélas, il ne peut y en avoir qu'un. Néanmoins évoqué.
libjpeg code> peut déjà faire cela, vous pouvez utiliser cette fonctionnalité à ImageMagick en définissant la taille de l'image avant B> Chargement.