मुझे निर्देशिका में छवियों के आयामों की जांच करने की आवश्यकता है। वर्तमान में इसमें ~ 700 छवियां हैं। मुझे बस आकारों की जांच करने की आवश्यकता है, और यदि आकार किसी दिए गए आयाम से मेल नहीं खाता है, तो इसे एक अलग फ़ोल्डर में ले जाया जाएगा। मैं कैसे शुरू करूँ?पायथन का उपयोग कर निर्देशिका में सभी छवियों के आयामों की जांच कैसे करें?
उत्तर
आप छवि शीर्षलेख पढ़ने और आयामों को क्वेरी करने के लिए Python Imaging Library (उर्फ पीआईएल) का उपयोग कर सकते हैं।
इसे देखने का एक तरीका स्वयं को एक ऐसा फ़ंक्शन लिखना होगा जो फ़ाइल नाम लेता है और आयाम लौटाता है (पीआईएल का उपयोग करके)। फिर इस फ़ंक्शन को लागू करने, निर्देशिका में सभी फ़ाइलों को पार करने के लिए os.path.walk
फ़ंक्शन का उपयोग करें। परिणामों को एकत्रित करते हुए, आप filename -> dimensions
मैपिंग का एक शब्दकोश बना सकते हैं, फिर आवश्यक आकार से मेल खाने वाले लोगों को फ़िल्टर करने के लिए एक सूची समझ (itertools
देखें) का उपयोग करें।
from PIL import Image
import os.path
filename = os.path.join('path', 'to', 'image', 'file')
img = Image.open(filename)
print img.size
तो फिर आप अपने निर्देशिका में फ़ाइलों पर पाश की जरूरत है, अपने आवश्यक आयाम के खिलाफ आयामों की जांच, और कदम:
एक सामान्य तरीका PIL, अजगर इमेजिंग पुस्तकालय का उपयोग करने के आयाम प्राप्त करने के लिए है उन फाइलें जो मेल नहीं खाती हैं।
आप जनहित याचिका के बाकी की जरूरत है नहीं और सिर्फ PNG, JPEG और GIF तो इस छोटे से समारोह (BSD लाइसेंस) की छवि आयाम चाहते अच्छी तरह से काम करता है:
http://code.google.com/p/bfg-pages/source/browse/trunk/pages/getimageinfo.py
import StringIO
import struct
def getImageInfo(data):
data = str(data)
size = len(data)
height = -1
width = -1
content_type = ''
# handle GIFs
if (size >= 10) and data[:6] in ('GIF87a', 'GIF89a'):
# Check to see if content_type is correct
content_type = 'image/gif'
w, h = struct.unpack("<HH", data[6:10])
width = int(w)
height = int(h)
# See PNG 2. Edition spec (http://www.w3.org/TR/PNG/)
# Bytes 0-7 are below, 4-byte chunk length, then 'IHDR'
# and finally the 4-byte width, height
elif ((size >= 24) and data.startswith('\211PNG\r\n\032\n')
and (data[12:16] == 'IHDR')):
content_type = 'image/png'
w, h = struct.unpack(">LL", data[16:24])
width = int(w)
height = int(h)
# Maybe this is for an older PNG version.
elif (size >= 16) and data.startswith('\211PNG\r\n\032\n'):
# Check to see if we have the right content type
content_type = 'image/png'
w, h = struct.unpack(">LL", data[8:16])
width = int(w)
height = int(h)
# handle JPEGs
elif (size >= 2) and data.startswith('\377\330'):
content_type = 'image/jpeg'
jpeg = StringIO.StringIO(data)
jpeg.read(2)
b = jpeg.read(1)
try:
while (b and ord(b) != 0xDA):
while (ord(b) != 0xFF): b = jpeg.read(1)
while (ord(b) == 0xFF): b = jpeg.read(1)
if (ord(b) >= 0xC0 and ord(b) <= 0xC3):
jpeg.read(3)
h, w = struct.unpack(">HH", jpeg.read(4))
break
else:
jpeg.read(int(struct.unpack(">H", jpeg.read(2))[0])-2)
b = jpeg.read(1)
width = int(w)
height = int(h)
except struct.error:
pass
except ValueError:
pass
return content_type, width, height
यह मेरे लिए एक आकर्षण की तरह काम करता है, +1 बिना तृतीय पक्ष पुस्तकालयों के समाधान के लिए। – Mercury
यहां एक स्क्रिप्ट है जो आपको चाहिए:
#!/usr/bin/env python
"""
Get information about images in a folder.
"""
from os import listdir
from os.path import isfile, join
from PIL import Image
def print_data(data):
"""
Parameters
----------
data : dict
"""
for k, v in data.items():
print("%s:\t%s" % (k, v))
print("Min width: %i" % data['min_width'])
print("Max width: %i" % data['max_width'])
print("Min height: %i" % data['min_height'])
print("Max height: %i" % data['max_height'])
def main(path):
"""
Parameters
----------
path : str
Path where to look for image files.
"""
onlyfiles = [f for f in listdir(path) if isfile(join(path, f))]
# Filter files by extension
onlyfiles = [f for f in onlyfiles if f.endswith('.jpg')]
data = {}
data['images_count'] = len(onlyfiles)
data['min_width'] = 10**100 # No image will be bigger than that
data['max_width'] = 0
data['min_height'] = 10**100 # No image will be bigger than that
data['max_height'] = 0
for filename in onlyfiles:
im = Image.open(filename)
width, height = im.size
data['min_width'] = min(width, data['min_width'])
data['max_width'] = max(width, data['max_height'])
data['min_height'] = min(height, data['min_height'])
data['max_height'] = max(height, data['max_height'])
print_data(data)
if __name__ == '__main__':
main(path='.')
मैं ऊपर दिए गए उत्तरों से काफी संतुष्ट हूं क्योंकि इससे मुझे इसके लिए एक और सरल उत्तर लिखने में मदद मिली सवाल।
जैसा कि उपर्युक्त उत्तर में केवल स्क्रिप्ट हैं इसलिए पाठकों को यह जांचने के लिए चलाने की आवश्यकता है कि वे ठीक काम करते हैं या नहीं। तो मैंने एक इंटरैक्टिव मोड प्रोग्रामिंग (पायथन शेल से) का उपयोग कर समस्या को हल करने का फैसला किया।
मुझे लगता है कि यह आपको स्पष्ट होगा। मैं पायथन 2.7.12 का उपयोग कर रहा हूं और मैंने छवियों तक पहुंचने के लिए पीआईएल का उपयोग करने के लिए तकिया लाइब्रेरी स्थापित की है। मेरे पास मेरी वर्तमान निर्देशिका में बहुत सारे jpg mages और 1 png छवि है।
अब चलिए पाइथन खोल पर चले जाते हैं।
>>> #Date of creation : 3 March 2017
>>> #Python version : 2.7.12
>>>
>>> import os #Importing os module
>>> import glob #Importing glob module to list the same type of image files like jpg/png(here)
>>>
>>> for extension in ["jpg", 'png']:
... print "List of all "+extension+" files in current directory:-"
... i = 1
... for imgfile in glob.glob("*."+extension):
... print i,") ",imgfile
... i += 1
... print "\n"
...
List of all jpg files in current directory:-
1) 002-tower-babel.jpg
2) 1454906.jpg
3) 69151278-great-hd-wallpapers.jpg
4) amazing-ancient-wallpaper.jpg
5) Ancient-Rome.jpg
6) babel_full.jpg
7) Cuba-is-wonderfull.jpg
8) Cute-Polar-Bear-Images-07775.jpg
9) Cute-Polar-Bear-Widescreen-Wallpapers-07781.jpg
10) Hard-work-without-a-lh.jpg
11) jpeg422jfif.jpg
12) moscow-park.jpg
13) moscow_city_night_winter_58404_1920x1080.jpg
14) Photo1569.jpg
15) Pineapple-HD-Photos-03691.jpg
16) Roman_forum_cropped.jpg
17) socrates.jpg
18) socrates_statement1.jpg
19) steve-jobs.jpg
20) The_Great_Wall_of_China_at_Jinshanling-edit.jpg
21) torenvanbabel_grt.jpg
22) tower_of_babel4.jpg
23) valckenborch_babel_1595_grt.jpg
24) Wall-of-China-17.jpg
List of all png files in current directory:-
1) gergo-hungary.png
>>> #So let's display all the resolutions with the filename
... from PIL import Image #Importing Python Imaging library(PIL)
>>> for extension in ["jpg", 'png']:
... i = 1
... for imgfile in glob.glob("*."+extension):
... img = Image.open(imgfile)
... print i,") ",imgfile,", resolution: ",img.size[0],"x",img.size[1]
... i += 1
... print "\n"
...
1) 002-tower-babel.jpg , resolution: 1024 x 768
2) 1454906.jpg , resolution: 1920 x 1080
3) 69151278-great-hd-wallpapers.jpg , resolution: 5120 x 2880
4) amazing-ancient-wallpaper.jpg , resolution: 1920 x 1080
5) Ancient-Rome.jpg , resolution: 1000 x 667
6) babel_full.jpg , resolution: 1464 x 1142
7) Cuba-is-wonderfull.jpg , resolution: 1366 x 768
8) Cute-Polar-Bear-Images-07775.jpg , resolution: 1600 x 1067
9) Cute-Polar-Bear-Widescreen-Wallpapers-07781.jpg , resolution: 2300 x 1610
10) Hard-work-without-a-lh.jpg , resolution: 650 x 346
11) jpeg422jfif.jpg , resolution: 2048 x 1536
12) moscow-park.jpg , resolution: 1920 x 1200
13) moscow_city_night_winter_58404_1920x1080.jpg , resolution: 1920 x 1080
14) Photo1569.jpg , resolution: 480 x 640
15) Pineapple-HD-Photos-03691.jpg , resolution: 2365 x 1774
16) Roman_forum_cropped.jpg , resolution: 4420 x 1572
17) socrates.jpg , resolution: 852 x 480
18) socrates_statement1.jpg , resolution: 1280 x 720
19) steve-jobs.jpg , resolution: 1920 x 1080
20) The_Great_Wall_of_China_at_Jinshanling-edit.jpg , resolution: 4288 x 2848
21) torenvanbabel_grt.jpg , resolution: 1100 x 805
22) tower_of_babel4.jpg , resolution: 1707 x 956
23) valckenborch_babel_1595_grt.jpg , resolution: 1100 x 748
24) Wall-of-China-17.jpg , resolution: 1920 x 1200
1) gergo-hungary.png , resolution: 1236 x 928
>>>
import os from PIL import Image folder_images = "/tmp/photos" size_images = dict() for dirpath, _, filenames in os.walk(folder_images): for path_image in filenames: image = os.path.abspath(os.path.join(dirpath, path_image)) with Image.open(image) as img: width, heigth = img.size SIZE_IMAGES[path_image] = {'width': width, 'heigth': heigth} print(size_images)
folder_images
में आप निर्देशिका तीर जहां यह छवियाँ है। size_images
इस प्रारूप में छवियों के आकार के साथ एक चर है।
Example {'image_name.jpg' : {'width': 100, 'heigth': 100} }
जबकि आपके कोड के पीछे विचार अच्छा है, इसमें स्पष्टीकरण की कमी है। मैं यह भी बताऊंगा कि सभी कैप्स में वेरिएबल्स आमतौर पर स्थिरांक के लिए उपयोग किए जाते हैं, इसलिए इसे 'SIZE_IMAGES' के साथ किए गए एक निर्देश के लिए उपयोग करना ऐसा कुछ नहीं है जिसे मैं अनुशंसा करता हूं। – PLPeeters
कृपया, मैं अपने उत्तर का फिर से मूल्यांकन कर सकता हूं। –
- 1. अपलोड की गई छवि के आयामों की जांच करें
- 2. विभिन्न आयामों में छवियों के साथ UITableViewCell
- 3. पायथन का उपयोग कर नेटवर्क निर्देशिका कैसे माउंट करें?
- 4. वेबसाइट की एक निर्देशिका से सभी छवियों को डाउनलोड करें
- 5. लोड की गई कई छवियों की जांच
- 6. निर्देशिका में सभी पायथन फ़ाइलों को चलाएं
- 7. एक्सप्रेसजेएस का उपयोग कर HOST की जांच कैसे करें?
- 8. jQuery का उपयोग कर आईडी अस्तित्व की जांच कैसे करें?
- 9. नेंट स्क्रिप्ट का उपयोग कर सभी सामग्री के साथ एक निर्देशिका की प्रतिलिपि कैसे करें?
- 10. जावास्क्रिप्ट का उपयोग कर सभी छवियों को कैसे छिपाना है?
- 11. मैं विभिन्न आयामों की दो छवियों के स्पेक्ट्रा को कैसे गुणा कर सकता हूं?
- 12. ftp निर्देशिका मौजूद होने पर पायथन जांच कैसे करें?
- 13. पायथन - सिस्टम लोड की जांच कैसे करें?
- 14. पायथन में एक फ्लोट के आकार की जांच कैसे करें?
- 15. एंड्रॉइड में सभी चल रही सेवाओं की जांच कैसे करें?
- 16. कक्षा के तहत या कक्षा का उपयोग करने के लिए सभी वर्गों की जांच कैसे करें?
- 17. निर्देशिका का चयन कैसे करें और पायथन
- 18. प्रतिबिंब - सभी शून्य गुणों की जांच करें
- 19. जेएसटीएल, ईएल का उपयोग कर जेएसपी पेज में ब्राउज़र के उपयोगकर्ता एजेंट की जांच कैसे करें?
- 20. पायथन: प्रकार की जांच
- 21. पायथन में होम निर्देशिका कैसे प्राप्त करें?
- 22. मैक/पायथन में स्क्रीन बंद होने की जांच कैसे करें?
- 23. ImagePiews में ViewPager + ज़ूम का उपयोग कर छवियों की गैलरी
- 24. Django टेम्पलेट्स में Matplotlib छवियों का उपयोग कैसे करें?
- 25. मैं सी # में दूषित टीआईएफएफ छवियों की जांच कैसे करूं?
- 26. मैवेन का उपयोग कर निर्देशिका में निर्भरता जार (परीक्षण जार के बिना) की प्रतिलिपि कैसे करें?
- 27. निर्देशिका में छवियों का आकार बदलें
- 28. पायथन-एफ़टीपी निर्देशिका में सभी फाइलें डाउनलोड करें
- 29. जावास्क्रिप्ट का उपयोग कर किसी पेज पर सभी छवियों का href कैसे प्राप्त कर सकता हूं?
- 30. पायथन स्ट्रिंग प्रारूप की जांच करें?
मैंने ऐसा किया लेकिन इसके बजाय os.listdir .. ~ 700 छवियों के साथ बहुत अच्छी तरह से काम करता है। क्या os.path.walk बेहतर है? – john2x
यदि 'os.listdir' आपको जो चाहिए वह करता है, तो यह ठीक है। मुख्य अंतर यह है कि 'os.walk' उपनिर्देशिका में पुन: कार्य करेगा। – gavinb