Page 1 sur 1
[R] Récupérer le nombre de pages d'un fichier multi tiff
Posté : ven. 26 mars 2010 16:56
par peuchere83
Bonjour à tous,
Je cherche à connaître le nombre de page contenu dans mon fichier tif.
J'ai remarqué que Windows l'affiche lors du clic droit > propriétés > résumé : on a Pages xx
Quelqu'un a t'il une idée pour pouvoir exploiter cette information ?
Cordialement
Re: [..] Récupérer le nombre de pages d'un fichier multi tiff
Posté : ven. 26 mars 2010 19:52
par Tlem
Cela doit surement ce passer dans l'entête du fichier. Regardez dans la description de celle-ci comment connaitre le nombre de page, ensuite avec AutoIt, vous n'aurez qu'à vous placer sur l'offset qui va bien et à le lire.

Re: [..] Récupérer le nombre de pages d'un fichier multi tiff
Posté : lun. 29 mars 2010 08:43
par peuchere83
Désolé Tlem mais je ne comprends pas ta suggestion.
Pourrais tu me donner un peu plus d'information.
Par avance merci
Re: [..] Récupérer le nombre de pages d'un fichier multi tiff
Posté : lun. 29 mars 2010 08:47
par Tlem
20 secondes de recherche avec notre ami.
http://crousseau.free.fr/imgfmt_tiff.htm
Re: [..] Récupérer le nombre de pages d'un fichier multi tiff
Posté : lun. 29 mars 2010 16:41
par peuchere83
Désolé Tlem d'insister si lourdement, mais j'étais déjà tombé sur ce site et je ne vois pas l'information qui m'intéresse à l'intérieur (ou alors je suis vraiment trop c.., ce qui est possible je vous l'accorde

)
J'ai ouvert le fichier avec notepad++ et rien à récupérer (j'ai fait une recherche à l'intérieur du nombre de page détecté par Windows et cela n'a rien donné).
Si quelqu'un a une idée je suis preneur
Re: [..] Récupérer le nombre de pages d'un fichier multi tiff
Posté : lun. 29 mars 2010 22:59
par Tlem
Je doute que tout le monde ait en sa possession un tel fichier (en tout cas, moi j'en ai pas !). Donc si pour commencer vous nous en passiez un !!!

Re: [..] Récupérer le nombre de pages d'un fichier multi tiff
Posté : mar. 30 mars 2010 04:06
par jchd
Personne ? Bon puisqu'il faut trouver un passant qui s'y colle, je me dévoue.
► Afficher le texte
Code : Tout sélectionner
;; Récupération du nombre d'images (maîtresses) d'un fichier TIF[F]
;; Non testé sur un ficher big-endian (gros-boutiste)
Local $file = 'test.tif'
Local $nbpages = _NbPagesTiff($file)
If @error Then
ConsoleWrite("Erreur pendant la lecture du fichier " & $file & @LF)
Else
ConsoleWrite("Nombre de pages dans le fichier " & $file & " : " & $nbpages & @LF)
EndIf
Func _NbPagesTiff($filename)
Local $h = FileOpen($filename, 16)
Local $uint16, $uint32
$uint16 = FileRead($h, 2)
If @error Then Return(SetError(@error, 0, 0))
Local $endian = ($uint16 = 'II')
$uint16 = _Read16($h, $endian)
If @error Or $uint16 <> 42 Then Return(SetError(@error, 0, 0))
$uint32 = _Read32($h, $endian)
If @error Then Return(SetError(@error, 0, 0))
If Not FileSetPos($h, $uint32, 0) Then Return(SetError(@error, 0, 0))
Local $pages
While 1
$pages += 1
$uint16 = _Read16($h, $endian)
If @error Then Return(SetError(@error, 0, 0))
FileSetPos($h, 12 * $uint16, 1)
$uint32 = _Read32($h, $endian)
If @error Then Return(SetError(@error, 0, 0))
If $uint32 = 0 Then ExitLoop
If Not FileSetPos($h, $uint32, 0) Then Return(SetError(@error, 0, 0))
WEnd
FileClose($h)
Return $pages
EndFunc
Func _Read16($hdl, $littleEndian)
Local $u16 = FileRead($hdl, 2)
If @error Then Return(SetError(@error, 0, 0))
If $littleEndian Then
Return(Number($u16))
Else
Return(Number(BitOR(BitShift($u16, 8), BitShift(BitAND($u16, 0xFF), -8))))
EndIf
EndFunc
Func _Read32($hdl, $littleEndian)
If $littleEndian Then
Local $u32 = FileRead($hdl, 4)
Return(SetError(@error, 0, Number($u32)))
Else
Local $u16_1 = _Read16($hdl, $littleEndian)
If @error Then Return(SetError(@error, 0, 0))
Local $u16_2 = _Read16($hdl, $littleEndian)
If @error Then Return(SetError(@error, 0, 0))
Return(Number(BitOR(BitShift($u16_1, -16), $u16_2)))
EndIf
EndFunc
Ce bidule devrait fonctionner sur les fichiers petit- et gros-boutistes, mais je n'ai pas d'outil qui me fabrique un .tif gros-boutiste. Le code ne décompte pas les miniatures ni le nombre de trames d'une vidéo, entendons-nous bien. Le résultat est le nombre d'images "simples" d'un fichier .tif "simple".
Par contre, je n'en ferai pas plus sur le format .tif, qui présente toutes les caractéristiques de la recharge de toner chinoise ou du bâton merd*ux : dès qu'on y touche, on est repeint ! Donc sans façon pour moi.
Re: [..] Récupérer le nombre de pages d'un fichier multi tiff
Posté : mar. 30 mars 2010 09:54
par peuchere83
Bonjour et merci à tous.
Jchd : je n'ai pas la commande FileSetPos(). Penses tu que cela vient de ma version d'autoit (3.3.0.0)
Tlem : je joins un fichier de test au cas ou ...
Par avance merci
Re: [..] Récupérer le nombre de pages d'un fichier multi tiff
Posté : mar. 30 mars 2010 12:09
par Tlem
peuchere83 a écrit :je n'ai pas la commande FileSetPos(). Penses tu que cela vient de ma version d'autoit (3.3.0.0)
Il faudrait évidement que vous fassiez une bonne mise à jour ...
D'après le script de jchd, votre fichier contient 5 pages. Est-ce correct ?
Re: [..] Récupérer le nombre de pages d'un fichier multi tiff
Posté : mar. 30 mars 2010 13:00
par peuchere83
Oui il y a bien 5 pages.
Merci pour tout à tous les 2.
Re: [R] Récupérer le nombre de pages d'un fichier multi tiff
Posté : mar. 30 mars 2010 14:12
par jchd
Parce qu'en plus, il fonctionne ce bout de code (quand on n'utilise pas la version de l'aieul, bien sûr) ?
J'en suis le premier surpris ! Non, je plaisante, c'était facile.
Par contre sachez, ô amateurs de tifs, que ce format a _aussi_ pour acronyme Thousand of Incompatible Files, à juste raison : c'est une sorte de conteneur dans lequel on peut glisser à peu près n'importe quoi, parfois avec des tags (identificateurs de composants) propriétaires, donc opaques, etc.
Dans un même fichier tif, on peut trouver, dans un ordre quelconque, une douzaine de .gif, cent quatre photos en rafale, une galerie de miniatures, une vidéo de popotin chiffrée et deux cartes satellite détaillées de la Papouasie orientale, chaque composant ayant sa propre colorimétrie et autres joyeusetés de compression et de rendu.
Plonger dans ce fatras en AutoIt, c'est un peu récrire Windows en
BrainFuck !
Re: [R] Récupérer le nombre de pages d'un fichier multi tiff
Posté : mar. 30 mars 2010 15:10
par Tlem