Installer avec Composer · Packagist ↗
Module optionnel · pdftoolkit/pdf-codecs 0.1.0
English | Français
Une bibliothèque PHP distincte et optionnelle pour décoder JPEG (DCTDecode),
JPEG 2000 (JPXDecode) et JBIG2 (JBIG2Decode). Elle reçoit des octets encodés
et renvoie des plans de composantes explicites. Elle ne lit pas un document PDF
et n’effectue pas le rendu d’une page.
Les guides consignent les mécanismes implémentés, les validations exécutables et les exclusions explicites. Un corpus validé ne constitue pas une preuve de conformité universelle pour tous les flux possibles.
Installation et utilisation
composer require pdftoolkit/pdf-codecs:^0.1
use PDFToolkit\Codecs\Codec;
use PDFToolkit\Codecs\DecodeLimits;
use PDFToolkit\Codecs\DecodeRequest;
use PDFToolkit\Codecs\PhpDecoder;
$decoder = new PhpDecoder(new DecodeLimits(maxPixels: 4_000_000));
$image = $decoder->decode(new DecodeRequest(Codec::Jpeg2000, $encodedBytes));
$sample = $image->components[0]->sample(0, 0);
L’appelant fournit les octets encodés. L’application manipulant explicitement
un fichier local est examples/decode.php.
| Guide | Périmètre implémenté |
|---|---|
| Architecture | Requêtes/résultats immuables, plans de composantes et propriété des ressources. |
| JPEG | DCT séquentiel et progressif huit bits, échantillonnage, marqueurs de reprise et priorité des transformations de couleur PDF. |
| JPEG 2000 | Décodage des composantes PDF JPX, précision et géométrie, transformations du flux et métadonnées couleur/alpha conservées. |
| JBIG2 | Profil PDF binaire arithmétique/Huffman/MMR, symboles, texte, raffinement, motifs, demi-teintes et dictionnaires globaux. |
Avec Reader, installer ce package dans la même application Composer. Reader détecte d’abord un décodeur natif compatible, puis cette bibliothèque optionnelle. Si aucun ne traite le profil demandé, il indique la capacité manquante et la commande Composer ; il n’installe jamais un package lui-même.
Contrat
PhpDecoder sélectionne le codec demandé. Chaque appel possède son état de
décodage et reçoit des DecodeLimits configurables. DecodedImage conserve
l’origine de l’image, la géométrie d’échantillonnage des composantes, leur
précision, leur signe, les métadonnées de couleur et l’association alpha.
ComponentPlane::sample() renvoie l’échantillon entier original ; les lignes
compactées placent les bits de poids fort en premier, avec bourrage seulement
en fin de ligne. Les valeurs signées sont en complément à deux sur leur
précision déclarée, y compris sur 38 bits.
Le décodeur ne réduit pas silencieusement la précision, n’inverse pas les
échantillons CMYK, ne convertit pas une couleur ICC en RGB, n’applique pas le
tableau PDF Decode et n’aplatit pas la transparence. Ces interprétations
appartiennent au consommateur. Les règles PDF de transformation de couleur
JPEG font partie du contrat DCT et sont documentées séparément.
La bibliothèque nécessite PHP 8.3 ou supérieur sur plateforme 64 bits. Son code de production ne dépend ni d’un processus, ni d’un chemin de fichier, ni du réseau, ni de Reader, ni du core. La détection des moteurs natifs et leur priorité avec repli PHP appartiennent à l’adaptateur Reader optionnel.
Limites de ressources et erreurs
Les limites portent sur les octets encodés (dont les données globales JBIG2), les octets décodés, les dimensions, les pixels, les composantes, le travail, les allocations cumulées comptabilisées, l’imbrication, les segments, les métadonnées et les tuiles. Ces bornes sont une politique de l’application, non des restrictions des formats. La comptabilisation des allocations ne remplace pas la limite mémoire du processus PHP hôte.
MalformedImage: structure de l’image ou données codées invalides.UnsupportedFeature: mécanisme déclaré que le décodeur choisi ne peut pas représenter ou traiter.ResourceLimit: budget configuré épuisé.
Ne pas réessayer silencieusement une entrée invalide ou un budget épuisé avec des limites plus permissives. Une application peut choisir un autre moteur capable après un résultat explicite de capacité non prise en charge.
Développement
Installer les outils de développement verrouillés avec Composer, puis lancer
composer check. Les outils indépendants et les fixtures reproductibles se
trouvent dans tools/ et resources/. La qualification d’une version exécute
PHP 8.3, 8.4 et 8.5 et les comparaisons applicables avec des encodeurs/décodeurs
indépendants.
Les algorithmes adaptés de PDF.js conservent leurs notices Apache-2.0 et leur révision amont exacte dans le registre de provenance de chaque codec. Voir LICENSE et les notices des ressources. Ce package est indépendant du core PDFToolkit sous licence MIT.