我正在尝试从下载的图像读取Exif数据。我在一个函数中将图像保存到我的计算机上,然后尝试在另一个函数中读取数据,但是我一直得到一个坏的模式错误。我已经能够从预先保存的映像中读取数据,并且只使用了._getexif(),但是当我试图对下载的图像做同样的事情时,它就无效了。我做错了什么?
下面是调用这两个函数的循环。
else:
imgTags = findImages(url)
for imgTag in imgTags:
imgFileName = downloadImage(imgTag)
testForExif(imgFileName)从页面中查找和下载图像
def findImages(url):
print '[*] Finding images on ' + url
urlContent = urllib2.urlopen(url).read()
soup = BeautifulSoup(urlContent)
imgTags = soup.findAll('img')
return imgTags
def downloadImage(imgTag):
try:
print '[+] Downloading image...'
imgSrc = imgTag['src']
imgContent = urllib2.urlopen(imgSrc).read()
imgFileName = basename(urlsplit(imgSrc)[2])
imgFile = open(imgFileName, 'wb')
imgFile.write(imgContent)
imgFile.close()
return imgFileName
except:
return ''读取exif数据
def testForExif(imgFileName):
exifData = {}
imgFile = Image.open(imgFileName, 'rb')
info = imgFile._getexif()
print '\n\n' + str(info) + '\n\n'
if info:
for (tag, value) in info.items():
decoded = TAGS.get(tag, tag)
exifData[decoded] = value
exifGPS = exifData['GPSInfo']
if exifGPS:
print '[+] ' + imgFileName + ' contains GPS MetaData'我相信“坏模式”错误是在testsForExif函数中触发的,在前几行的某个地方。它永远不会到达第一个打印语句。
我得到的确切错误是。
ValueError:坏模式 追溯(最近一次调用):文件"C:\Users\HeyNow\Downloads\Python\Cookbook\Forensics\metaurl.py",第59行,main() "C:\Users\HeyNow\Downloads\Python\Cookbook\Forensics\metaurl.py",第56行,main testForExif(imgFileName) "C:\Users\HeyNow\Downloads\Python\Cookbook\Forensics\metaurl.py",第31行,testForExif imgFile = Image.open(imgFileName,‘'rb')文件“C:\Python27 27\lib\site-packages\PIL\Image.py”,第1947行,在open ValueError(“坏模式”) ValueError:坏模式中
通过玩它,我也得到了一个。
坏模式'rb',文件名;
也有错误。
我迷路了。
编辑:如果我更改::
imgFile = Image.open(imgFileName, 'rb')至
imgFile = Image.open(imgFileName)我得到了AttributeError: _getexif()的回溯:
追溯(最近一次调用):文件"C:\Users\HeyNow\Downloads\Python\Cookbook\Forensics\metaurl.py",第59行,main() "C:\Users\HeyNow\Downloads\Python\Cookbook\Forensics\metaurl.py",第56行,主testForExif(imgFileName)文件"C:\Users\HeyNow\Downloads\Python\Cookbook\Forensics\metaurl.py",第32行,在testForExif info = imgFile._getexif()文件“C:\Python27 27\lib\site-packages\PIL\Image.py”第512行中,getattr raise (Name) AttributeError:_getexif
发布于 2014-06-23 16:48:39
我认为,由于"downloadImages“的工作方式,您会遇到错误。如果出现任何类型的错误,您只是返回一个空字符串。但是,在尝试打开文件名之前,如果不检查文件名是否为空字符串,请返回testforexif。
Image.open('') 将导致imgfile为空。因此,它没有属性,您将得到属性错误。
在解析网页或处理文件名时可能会出现一些错误,即抛出错误。不正确地处理错误是非常糟糕的形式,在这种情况下,它导致您的程序根本无法工作。您有try/ but语句,但是即使有错误,也可以继续。您需要做的是,如果出现错误(或为null),则更改are子句以跳过该文件名。希望这能有所帮助。
编辑:
尝试在运行时打印变量(例如文件名),以确保它们是正确的,并且图像是存在的。这也可能是一个文件类型问题。例如,您的脚本可能正在查找一些非jpg图像文件,并试图在bmp或其他方面打开exif数据。
发布于 2014-06-23 16:13:22
https://stackoverflow.com/questions/24370527
复制相似问题