Forum Programmation.shell imagamagick en pratique : scanner -> gros tiff ...

Posté par  (site web personnel) .
Étiquettes : aucune
0
10
jan.
2007
Salut,


Au boulot, une multifonction produit de gros fichiers tif avec parfois plusieurs pages dedans, sous forme de calques (me semble-t-il). Ces fichiers arrivent via ftp dans un dossier partagé sur une machine Linux.

J'aimerais qu'automatiquement, ces images soit converties en un fichier png par page (par calque). Si au passage, chaqu'un de ces fichier png pouvait être "optimisé" pour prendre le moins de place possible (pas de canal alpha, espace de couleur respecté)

J'ai trouvé imagamagick, mais je comprend pas tout :/

Par exemple :
- je trouve pas comment séparer les calque du tif en plusieurs fichiers.
- convert par d'une image tif noir et blanc et me sort un png en rgb (trois fois plus gros donc... Comment éviter cela et respecter l'espace de couleur d'origine, sachant que les tif peuvent être de différents à ce niveau.

Y a-t-il un wiki ou forum à propos de imagemagick, avec de l'expérience etc. ?

Merci d'avance ^_^
  • # ok

    Posté par  (site web personnel) . Évalué à 2.

    ici, bientôt les fruits de mes recherches... J'ai trouvé des solutions, notemment avec libtiff-tools et son tiffsplit ^_^
    • [^] # Re: ok

      Posté par  (site web personnel) . Évalué à 1.

      #!/bin/bash


      # filename
      is_a_ricoh_file ()
      {
      Filename=$1

      Ricoh_filename_length=21
      Ricoh_filename_digits=17

      Length=${#Filename}
      # Length=`expr length "$Filename"`
      Digits=`expr "$Filename" : '[0-9]*'`

      if [ $Length -eq $Ricoh_filename_length ] \
      && [ $Digits -eq $Ricoh_filename_digits ]
      then
      return 1
      fi

      return 0
      }

      # filename
      split_tiff_pages ()
      {
      Filename=$1
      }

      new_files ()
      {
      Incoming_folder="/donnees/scanner/ricoh"
      Temp_folder="/donnees/scanner/temp"
      Shared_folder="/donnees/scanner/partage"

      [ -d "$Incoming_folder" ] || return -4
      [ -d "$Temp_folder" ] || return -4
      [ -d "$Shared_folder" ] || mkdir -p "$Shared_folder"

      if ls "$Incoming_folder/"* &>/dev/null ; then

      echo '---------------------------------------------------'
      echo 'Splitting now...'
      cd "$Incoming_folder"
      for Filename in *.tif
      do
      is_a_ricoh_file "$Filename"
      if [ $? -eq 1 ] ; then
      Racine="$Temp_folder/${Filename:0:4}-${Filename:4:2}-${Filename:6:2} ${Filename:8:2}h${Filename:10:2}-${Filename:12:2} page "
      if ! ls "$Racine"* &>/dev/null ; then
      # echo $Racine
      sleep 10s
      echo 'tiffsplit "'$Filename'" "'$Racine'"'
      tiffsplit "$Filename" "$Racine"
      rm "$Filename"
      fi
      fi
      done
      fi

      if ls "$Temp_folder/"* &>/dev/null ; then

      echo 'Convert now...'
      cd $Temp_folder
      for Filename in *.tif
      do
      # echo "$Filename -> $Png_filename"
      # Colorspace=`identify -format "%r" $Filename`
      # Depth=`identify -format "%z" $Filename`

      RGBA_filename="${Filename%.tif}_RGBA.tif"
      echo 'tiff2rgba "'$Filename'" "'$RGBA_filename'"'
      tiff2rgba "$Filename" "$RGBA_filename"
      rm "$Filename" &

      Png_filename="${Filename%.tif}.png"
      echo 'convert -quality 100 "'$RGBA_filename'" "'$Png_filename'"'
      convert -quality 100 "$RGBA_filename" "$Png_filename"

      Jpg_filename="${Filename%.tif}.jpg"
      echo 'convert -resample 150x150 -normalize -quality 60 "'$RGBA_filename'" "'$Jpg_filename'"'
      # when possible, replace -normalize by -contrast-stretch 5%
      convert -resample 150x150 -normalize -quality 60 "$RGBA_filename" "$Jpg_filename"

      rm "$RGBA_filename" &

      Shared_png_filename="$Shared_folder/$Png_filename"
      Shared_jpg_filename="$Shared_folder/$Jpg_filename"
      mv "$Png_filename" "$Shared_png_filename"
      mv "$Jpg_filename" "$Shared_jpg_filename"
      chown professeur:professeur "$Shared_jpg_filename"
      chown professeur:professeur "$Shared_png_filename"
      echo 'Moved to shared folder'
      done

      fi
      }

      while true
      do
      new_files
      sleep 1s
      done

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.