lundi 18 juin 2012

Trouver des images PNG Larger Than X pixels à travers la coquille de Linux

Lorsque vous essayez de travailler à changer la conception de votre site, vous devez être concernés par la largeur des images dans votre contenu de l'article. J'ai screenshots notoirement important sur la plupart des articles que j'ai écrit, donc si je veux augmenter l'encadré il est essentiel de comprendre quelles images vont être trop large pour s'adapter à la nouvelle conception.

Depuis que je suis un programmeur, il serait facile pour moi d'écrire une petite application pour ce faire, mais ça m'a fait penser ... Pourquoi ne puis-je faire cela sur la ligne de commande Linux?

La première chose que j'ai compris, c'est que les images PNG afficher les données de taille lorsque vous exécutez le commande «file» sur eux:

$ Image3.png fichier
image3.png: les données d'image PNG, 613 x 657, 8-bit/color RGBA, non-entrelacé

Très utile puisque 99% de l'image sur ce site sont au format PNG. Alors maintenant, pour le jeter dans une boucle pour tous les fichiers dans mon répertoire d'upload:

$ For f in *. png; ne f fichier $; fait

image.png: les données d'image PNG, 631 x 185, 8-bit/color RGBA, non-entrelacé
image1.png: les données d'image PNG, 631 x 96, 8-bit/color RGBA, non-entrelacé
image10.png: les données d'image PNG, 375 x 395, 8-bit/color RGBA, non-entrelacé
image11.png: les données d'image PNG, 484 x 241, 8-bit/color RGBA, non-entrelacé
-snipped-

Ceci est plus utile, mais je dois extraire les données dans Excel ou une application similaire, afin de trier les données, alors j'ai décidé d'utiliser le linux "couper" la commande de se retirer juste la largeur des colonnes.

Vous remarquerez sur la touche F5-paramètre indique coupé pour prendre la cinquième colonne, et le-d avec un espace après il raconte coupé d'utiliser un espace comme délimiteur. Le caractère slash est un caractère d'échappement pour indiquer au shell à utiliser l'espace comme un caractère, et non pas comme des espaces.

$ For f in *. png; ne le fichier $ f | cut-f5-d ; fait

631
631
375
484
-snipped-

Pas tout à fait sortie utile, est-il? Poussons que grâce à une bash si la déclaration, et alors seulement montrer la sortie de la commande de fichier lorsque la largeur est plus grande que 600 pixels.

Notez le `(backtick) autour de la marque" fichier $ f | cut ... » section, qui indiquent que les commandes à l'intérieur du `seront traitées comme une seule sortie et introduites dans l'instruction if, où nous utilisons un-gt (greater than). Notez également que vous avez besoin d'espace autour de chaque côté de l'entre crochets []

for f in *. png; do if [`fichier $ f | cut-f5-d `-gt 600], puis le fichier $ f; fi; fait

image.png: les données d'image PNG, 631 x 185, 8-bit/color RGBA, non-entrelacé
image1.png: les données d'image PNG, 631 x 96, 8-bit/color RGBA, non-entrelacé
image17.png: les données d'image PNG, 638 x 340, 8-bit/color RGBA, non-entrelacé
image18.png: les données d'image PNG, 608 x 448, 8-bit/color RGBA, non-entrelacé
-snipped-

Nous avons maintenant une liste de tous les fichiers de plus de 600 pixels de large. Vous pouvez régler le "fichier $ f" à la fin de simplement l'écho des noms de fichiers, si vous aviez besoin de les copier ou les déplacer ailleurs:

for f in *. png; do if [`fichier $ f | cut-f5-d `-gt 600]; then echo $ f; fi; fait

image.png
image1.png
image17.png
image18.png
-snipped-

Le shell Linux est incroyablement puissant! Cette solution n'est pas vraiment pratique pour tout le monde, mais il est bon de savoir comment travailler avec le shell de sorte que vous pouvez accomplir ce type de tâche lorsque vous avez besoin.

Aucun commentaire:

Enregistrer un commentaire