コード例 #1
0
def getInternalCalibrationMatrix(path):
    #Using the given info
    # CMOS长宽信息
    w_c = 17.3
    h_c = 13.0
    # 读取图片的长宽信息
    img = cv2.imread(path)
    h = img.shape[0]
    w = img.shape[1]
    print(w, h)

    # 从EXIF中读取焦距
    i = Image(path)
    a, b = i.read_exif().get('Exif.Photo.FocalLength').split('/')
    fm = int(a) / int(b)
    f = w * fm / w_c

    # 计算内参信息
    K = np.zeros((3, 3))
    K[0][0] = f
    K[1][1] = f
    K[0][2] = w / 2
    K[1][2] = h / 2
    K[2][2] = 1
    return K
コード例 #2
0
ファイル: util.py プロジェクト: drougge/wellpapp-pyclient
	def _pyexiv2_old(self, fn):
		from pyexiv2 import Image
		exif = Image(fn)
		exif.readMetadata()
		keys = set(exif.exifKeys())
		self._getitem = exif.__getitem__
		self._contains = keys.__contains__
コード例 #3
0
    def getPara_PICTURE_EXIF(self, standardPicDir):
        """
        从图像EXIF参数中获取相机参数
        :param standardPicDir: 标准像片
        :return:
        """
        # CMOS长宽信息
        w_c = 6.29
        h_c = 5.21

        # 读取图片的长宽信息
        img = cv2.imread(standardPicDir)
        h = img.shape[0]
        w = img.shape[1]
        print(w, h)

        # 从EXIF中读取焦距
        i = Image(standardPicDir)
        a, b = i.read_exif().get('Exif.Photo.FocalLength').split('/')
        fm = int(a) / int(b)
        f = w * fm / w_c

        # 计算内参信息
        K = np.zeros((3, 3))
        K[0][0] = f
        K[1][1] = f
        K[0][2] = w / 2
        K[1][2] = h / 2
        print(K)
コード例 #4
0
ファイル: ImageMetadataUtil.py プロジェクト: newjokker/JoUtil
 def read_key_from_img(img_path):
     """拿到图像标签数据"""
     img = Image(img_path)
     img_info_dict = img.read_iptc()
     img.close()
     if "Iptc.Application2.Keywords" in img_info_dict:
         key_words = img_info_dict["Iptc.Application2.Keywords"]
         return key_words
     else:
         return None
コード例 #5
0
def add_to_exif(known):
    for file_name, identified_names in known.items():
        name_string = ""
        for each_name in identified_names:
            if name_string == "":
                name_string = each_name
            else:
                name_string += ", " + each_name
        copyfile(join(r"C:\Users\Book\Desktop\face recogniser\input_image", file_name), join(r"C:\Users\Book\Desktop\face recogniser\tagged_image", file_name))
        i = Image(join(r"C:\Users\Book\Desktop\face recogniser\tagged_image", file_name))
        i.modify_exif({"Exif.Image.Make": name_string})
コード例 #6
0
def exif_copy(
        src,
        target):  #transfers exif data from a source image to a target image

    with Image(r'{}'.format(src)) as img_src, Image(
            r'{}'.format(target)) as img_targ:

        exif_data = img_src.read_exif()  #exif data (if present)
        img_targ.modify_exif(exif_data)

        iptc_data = img_src.read_iptc()  #iptc data (if present)
        img_targ.modify_iptc(iptc_data)

        xmp_data = img_src.read_xmp()  #xmp data (if present)
        img_targ.modify_xmp(xmp_data)
コード例 #7
0
ファイル: base.py プロジェクト: yaserOSource/pyexiv2
def setup_function():
    if ENV.skip_test:
        pytest.skip()
    shutil.copy(
        ENV.original_img,
        ENV.test_img)  # Before each test, make a temporary copy of the image
    ENV.img = Image(ENV.test_img)
コード例 #8
0
ファイル: exif.py プロジェクト: bigsoftcms/fuse-medialib
 def getAttributes(self, fileName, fileObject, fileStat, fileAttributes):
     try:
         img = Image(fileName)
     except:
         return False
     
     fileAttributes[u"class"] = u"image"
     
     mapper = Mapper(fileAttributes, img)
     
     mapper.assign({
         'Exif.Image.Make': u"image/make",
         'Exif.Image.Model': u"image/make-model",
         'Exif.Image.DateTime': ATTR_GENERIC_DATETIME,
         'Exif.Image.XResolution': u"image/x-resolution",
         'Exif.Image.YResolution': u"image/y-resolution",
         'Exif.Photo.ExposureTime': u"photo/exposure-time",
         'Exif.Photo.FNumber': u"photo/f-number",
         'Exif.Photo.ISOSpeedRatings': u"photo/iso-speed-ratings",
         'Exif.Photo.ShutterSpeedValue': u"photo/shutter-speed-value",
         'Exif.Photo.ApertureValue': u"photo/aperture-value",
         'Exif.Photo.ExposureBiasValue': u"photo/exposure-bias-value",
         'Exif.Photo.MeteringMode': u"photo/metering-mode",
         'Exif.Photo.Flash': u"photo/flash",
         'Exif.Photo.FocalLength': u"photo/focal-length"
     })
コード例 #9
0
def read_exif(input_pic):
    img = Image(input_pic)
    data = img.read_exif()
    print("exif:", data)
    # data2 = img.read_iptc()
    # print("iptc:", data2)
    # data3 = img.read_xmp()
    # print("xmp:", data3)
    # data4 = img.read_raw_xmp()
    # print("raw_xmp:", data4)
    # data5 = img.read_comment()
    # print("comment:",data5)
    # data6 = img.read_icc()
    # print("icc:",data6)
    img.close()
    return data
コード例 #10
0
ファイル: base.py プロジェクト: yaserOSource/pyexiv2
def check_the_copy_of_img(diff, reference, method_name):
    """ Copy the image and check it, in case the modified data is not saved to disk. """
    try:
        shutil.copy(ENV.test_img, ENV.test_img_copy)
        with Image(ENV.test_img_copy) as img:
            diff(reference, getattr(img, method_name)())
    finally:
        os.remove(ENV.test_img_copy)
コード例 #11
0
ファイル: EXIF.py プロジェクト: Coderxiaobai1/TolearnC-
def Process_img(path):
    image = Image(path)
    i_xmp = image.read_xmp()
    info = {
        'GPSLatitude':
        i_xmp.get('Xmp.drone-dji.GpsLatitude'),
        'GPSLongitude':
        i_xmp.get('Xmp.drone-dji.GpsLongtitude'),
        'GPSAltitude':
        i_xmp.get('Xmp.drone-dji.AbsoluteAltitude'),
        'GPSRelativeAltitude':
        i_xmp.get('Xmp.drone-dji.RelativeAltitude'),
        'CameraRoll':
        i_xmp.get('Xmp.drone-dji.GimbalRollDegree'),
        'CameraYaw':
        i_xmp.get('Xmp.drone-dji.GimbalYawDegree'),
        'CameraPitch':
        i_xmp.get('Xmp.drone-dji.GimbalPitchDegree'),
        'FlightRoll':
        i_xmp.get('Xmp.drone-dji.FlightRollDegree'),
        'FlightYaw':
        i_xmp.get('Xmp.drone-dji.FlightYawDegree'),
        'FlightPitch':
        i_xmp.get('Xmp.drone-dji.FlightPitchDegree'),
        'SpeedX':
        i_xmp.get('Xmp.drone-dji.FlightXSpeed'),
        'SpeedY':
        i_xmp.get('Xmp.drone-dji.FlightYSpeed'),
        'SpeedZ':
        i_xmp.get('Xmp.drone-dji.FlightZSpeed'),
        'CalibratedOpticalCenterX':
        i_xmp.get('Xmp.drone-dji.CalibratedOpticalCenterX'),
        'CalibratedOpticalCenterY':
        i_xmp.get('Xmp.drone-dji.CalibratedOpticalCenterY'),
        'CalibratedOpticalFocalLength':
        i_xmp.get('Xmp.drone-dji.CalibratedFocalLength'),
    }
    i_exif = image.read_exif()
    info['XResolution'] = i_exif.get('Exif.Image.XResolution')
    info['YResolution'] = i_exif.get('Exif.Image.YResolution')
    info['PixelXDimension'] = i_exif.get('Exif.Photo.PixelXDimension')
    info['PixelYDimension'] = i_exif.get('Exif.Photo.PixelYDimension')
    info['FocalLength'] = i_exif.get('Exif.Photo.FocalLength')
    info['FocalLengthIn35mmFilm'] = i_exif.get(
        'Exif.Photo.FocalLengthIn35mmFilm')
    return info
コード例 #12
0
ファイル: fr.py プロジェクト: RobotSe7en/FaceRec
def face_rec(fpath, names, known_faces, model='hog'):
    unknown_images = get_file_path(fpath)
    count = 0
    total = len(unknown_images)
    for i in unknown_images:
        count += 1
        try:
            im = Image(i)
        except:
            print('Pass ' + i)
            continue
        # im_xmp = im.read_xmp()
        # if 'Xmp.xmp.Keywords' in im_xmp.keys():
        # 	continue
        final_labels = ''
        xmp_labels = dict()
        xmp_labels.setdefault('Xmp.xmp.Keywords', '')
        unknown = face_recognition.load_image_file(i, pixel=1000)
        face_loc = face_recognition.face_locations(unknown, model=model)
        unknown_face_encoding = face_recognition.face_encodings(
            unknown, known_face_locations=face_loc)
        for f in unknown_face_encoding:
            dis = face_recognition.face_distance(known_faces, f)
            min_dis = min(dis)
            if min_dis <= 0.5:
                idx = dis.tolist().index(min_dis)
                label = names[idx] + ','
                xmp_labels['Xmp.xmp.Keywords'] = xmp_labels[
                    'Xmp.xmp.Keywords'] + label
                im.modify_xmp(xmp_labels)
                final_labels = im.read_xmp()['Xmp.xmp.Keywords']
        print(
            str(count) + '/' + str(total) + '  ' + i + ' added labels: ' +
            str(final_labels))
        im.close()
コード例 #13
0
ファイル: app.py プロジェクト: kangah-codes/metas-strip
def open_image():
    global input_box
    global return_box
    metadata = None
    return_box = guizero.Box(app, width="fill")
    try:
        # using PIl to open image
        img = Image.open(input_box.value)
        # opening pyexiv2 instance from image
        meta = Meta(input_box.value)
        # opening the instance like this so that we don't close it after reading metadata so object is still in memory, although this can cause a memory leak

        # with Meta(input_box.value) as meta: -> using this method will delete the object and we will no longer have access to it in the clear meta function
        metadata = meta.read_exif()
        message = guizero.Text(return_box, text="")
        thumbnail = guizero.Picture(return_box,
                                    image=img,
                                    width=100,
                                    height=100)
        message = guizero.Text(return_box, text="")
        if not metadata:
            # picture has no metadata
            listbox = guizero.ListBox(return_box,
                                      items=["No metadata was extracted"],
                                      width="fill",
                                      height=50)
        else:
            listbox = guizero.ListBox(return_box, items=[], width="fill")
            cancel = guizero.PushButton(buttons_box,
                                        text="Strip Metadata",
                                        align="right",
                                        command=clear_meta,
                                        args=[meta])
            for _ in metadata.items():
                # add each item in metadata to listbox
                listbox.append(f"{_[0]}:     {_[1]}")
    except FileNotFoundError:
        message = guizero.Text(return_box, text="")
        thumbnail = guizero.Picture(return_box,
                                    image=f'error.jpeg',
                                    width=200,
                                    height=200)
        message = guizero.Text(return_box, text="")
        message = guizero.Text(return_box, text="Image not found")
コード例 #14
0
 def read_exiv2_image(path) -> Image:
     """
     Read an image with basic error handling. Note: Exiv2 ``RuntimeError`` usually means
     corrupted metadata. See: https://dev.exiv2.org/issues/637#note-1
     """
     try:
         return Image(path)
     except RuntimeError:
         logger.exception(f'Failed to read corrupted metadata from {path}')
         return None
コード例 #15
0
    def geotag_photo(self, file, lat, lon):
        img = Image(file)
        exif_lat = str(int(lat)) + "/1 " + str(int(
            lat % 1 * 60)) + "/1 " + str(
                int(round((lat % 1 * 60) % 1 * 60, 4) * 100)) + "/100"
        exif_lon = str(int(lon)) + "/1 " + str(int(
            lon % 1 * 60)) + "/1 " + str(
                int(round((lon % 1 * 60) % 1 * 60, 4) * 100)) + "/100"
        if int(lat) < 0:
            exif_lat_ref = 'S'
        else:
            exif_lat_ref = 'N'

        if int(lon) < 0:
            exif_lon_ref = 'W'
        else:
            exif_lon_ref = 'E'
        img.modify_exif({
            'Exif.GPSInfo.GPSLatitudeRef': exif_lat_ref,
            'Exif.GPSInfo.GPSLatitude': exif_lat,
            'Exif.GPSInfo.GPSLongitudeRef': exif_lon_ref,
            'Exif.GPSInfo.GPSLongitude': exif_lon
        })
コード例 #16
0
ファイル: utils.py プロジェクト: rranshous/imagecomment
def get_image_comments(path):
    image = Image(path)
    image.readMetadata()
    comments = image.getComment()
    if not comments:
        return []
    pieces = comments.split(COMMENT_DELIMINATOR)
    comments = []
    print 'getting:',path
    for piece in pieces:
        data = {}
        sub_pieces = [x.strip() for x in piece.split(':') if x.strip()]
        # the first piece (if there is more than one)
        # is the label. if there is only one it's the body

        if len(sub_pieces) == 0:
            continue
        elif len(sub_pieces) == 1:
            body = data.get('body','')
            body += ('\n' if body else '') + sub_pieces[0]
            data['body'] = body
        else:
            # first is going to be the label w/
            # possible sub labels
            if '[' in sub_pieces[0]:
                label = sub_pieces[0].split('[')[0]
                data['label'] = label
                sub_labels = sub_pieces[0][len(label):]
                sub_labels = sub_labels.replace('[')
                # the last one will be blank
                sub_labels = sub_labels.split(']')[:-1]
                data['sub_labels'] = sub_labels
            else:
                data['label'] = sub_pieces[0]
        print 'adding:',data
        comments.append(data)
    return comments
コード例 #17
0
def readMetadata(image):
    print("Resultados para "+image+ ' \n ') #indica en consola los metadatos
    file=open("metadatos.html","a") #Crea el archivo donde se exportan los metadatos, y dado el caso que ya exista, lo abre con el puntero en la ultima línea
    file.write(' \n Resultados para' + image + ' \n ') #Escribe en el archivo
    try:
        for (k,v) in PImage.open(image)._getexif().items(): #Por cada metadato extraido de la imagen
            print('%s = %s ' % (TAGS.get(k), v)) #Imprime en pantalla
            file.write('\n')
            file.write('\n %s = %s ' % (TAGS.get(k), v)) #Escribe en el archivo
            file.write('\n') #Salto de linea en el archivo

        with Image(image) as img: #Otros metadatos imprimidos en consola
            data=img.read_exif()
            data2=img.read_iptc()
            data3=img.read_raw_xmp()

        
        if data:
            print("Metadatos Exif")
            file.write(" \n Metadatos Exif \n ")
            file.write(' \n ')
            for key, value in data.items():
                print (key, ":", value)
                file.write(key, ":", value)
                file.write('\n')
        if data2:
            print("Metadatos IPTC")
            file.write("\n Metadatos IPTC \n")
            file.write('\n')
            for key, value in data2.items():
                print (key, ":", value)
                file.write(key, ":", value)
                file.write('\n')
       
        if data3:
            print("Metadatos RAW XMP")
            file.write("\n Metadatos RAW XMP \n ")
            file.write('\n')
            for key, value in data3.items():
                print (key, ":", value)
                file.write(key, ":", value)
                file.write('\n')
        
    except:
        print ("Metadata no encontrada! \n ")
        file.write(" \n Metadata no encontrada \n ")
    file.write('\n')
    file.write('\n')
    file.close()
コード例 #18
0
ファイル: ImageMetadataUtil.py プロジェクト: newjokker/JoUtil
    def add_key_to_img(img_path, key_words):
        """往图像中写入标签数据,可以以逗号分隔,或者用 json 格式"""

        if isinstance(key_words, list) or isinstance(
                key_words, tuple) or isinstance(key_words, set):
            key_words = map(lambda x: str(x), key_words)
            key_words = ",".join(key_words)

        key_words_dict = {'Iptc.Application2.Keywords': key_words}
        img = Image(img_path)
        img.modify_iptc(key_words_dict)
        img.close()
コード例 #19
0
def writ_gps(image_path, coo):
    # 转换并写入图像地理范围,存储于Xmp.dc字段下(x1、y1)(x2,y2)下
    # {'Xmp.dc.x1': 'E120.25',
    # 'Xmp.dc.y1': 'N31.05000000000001',
    # 'Xmp.dc.x2': 'E121.29999999999994',
    # 'Xmp.dc.y2': 'N30.25'}

    if coo[0][0] > 0:
        long_location_lef = "E"
    else:
        long_location_lef = "W"
    if coo[0][1] > 0:
        lati_location_lef = "N"
    else:
        lati_location_lef = "S"
    if coo[1][0] > 0:
        long_location_rig = "E"
    else:
        long_location_rig = "W"
    if coo[1][1] > 0:
        lati_location_rig = "N"
    else:
        lati_location_rig = "S"

    longituade_lef = abs(coo[0][0])
    latituade_lef = abs(coo[0][1])
    longituade_rig = abs(coo[1][0])
    latituade_rig = abs(coo[1][1])

    point1_x1 = str(long_location_lef) + str(longituade_lef) + "°"
    point1_y1 = str(lati_location_lef) + str(latituade_lef) + "°"
    point2_x1 = str(long_location_rig) + str(longituade_rig) + "°"
    point2_y2 = str(lati_location_rig) + str(latituade_rig) + "°"

    img = Image(image_path)
    img.modify_xmp({"Xmp.dc.x1": point1_x1})
    img.modify_xmp({"Xmp.dc.y1": point1_y1})
    img.modify_xmp({"Xmp.dc.x2": point2_x1})
    img.modify_xmp({"Xmp.dc.y2": point2_y2})
    img.close()
コード例 #20
0
def mag_calc(image, distance, rings):

    with Image(r'{}'.format(image)) as img:
        exif_data = img.read_exif()  #take exif data

    try:
        print(float(Fraction(exif_data['Exif.Photo.FocalLength'])) / 1000)
        focal_length = float(Fraction(exif_data['Exif.Photo.FocalLength'])
                             ) / 1000  #if present converts focal length to m

    except KeyError:
        print(f'Error, focal length not found for {image} setting it to 55mm.'
              )  #if not sets a standard value
        focal_length = 0.055

    og_mag = 1 / ((distance + rings + focal_length) /
                  (focal_length))  #calculate the starting mag.ratio
    new_mag = og_mag + (rings / focal_length
                        )  #calculate mag.ratio with macro rings

    return focal_length, og_mag, new_mag
コード例 #21
0
ファイル: utils.py プロジェクト: rranshous/imagecomment
def set_image_comment(path,*args,**kwargs):
    """
    takes any kwarg, to use as a labeled part of the comment.
    can also take single arg to use as body of comment
    """
    if args and not kwargs:
        kwargs['body'] = '\n'.join(args)

    image = Image(path)
    image.readMetadata()
    # append is a possible kwarg
    append = True
    existing = image.getComment() or "" if append else ""
    comment_parts = [COMMENT_DELIMINATOR] if existing else []
    for k,v in kwargs.iteritems():
        if v is None:
            continue
        if k == 'append':
            append = v
        else:
            template = TEMPLATES.get(k,"%s:%s" % (k,v))
            comment_parts.append(template % v)
    image.setComment(existing + "\n".join(comment_parts))
    image.writeMetadata()
コード例 #22
0
import os
import sys

from pyexiv2 import Image

print('Number of arguments:', len(sys.argv), 'arguments.')
print('Argument List:', str(sys.argv))

path = sys.argv[1]
entries = os.scandir(path)

indexFile = open(path + "\\index.txt", mode="w", encoding="utf-8")

def get_image_description(path, metadata):
    if path.endswith('_b.jpg'):
        return metadata.get('Exif.Image.ImageDescription', 'delete')
    return metadata.get('Exif.Image.ImageDescription', '')

for entry in entries:
    if entry.name.endswith('.jpg'):
        i = Image(entry.path)
        metadata = i.read_exif()
        photo_date = metadata.get('Exif.Photo.DateTimeOriginal')
        description = get_image_description(entry.path, metadata)

        line = entry.name + '\n' + description + '\n' + photo_date
        print(line)
        indexFile.write(line + '\n')
コード例 #23
0
ファイル: __init__.py プロジェクト: 2bj/yafotkiuploader
    def upload(self, album, filename,
               title=None,
               tags=None,
               description=None,
               access_type=ACCESS.PUBLIC,
               disable_comments=False,
               xxx=False,
               hide_orig=False,
               storage_private=False,
               ):
        logging.debug('Uploading %r to album %s' % (filename, album))

        tags = tags or u''
        title = title or os.path.basename(filename)
        description = description or u''

        try:
            from pyexiv2 import Image as ImageExif
        except:
            logging.warning('can\'t find python-pyexiv2 library, exif extraction will be disabled.')
            ImageExif = None

        if ImageExif:
            try:
                exif = ImageExif(filename)
                try:
                    exif.readMetadata()
                    try: tags = tags or u','.join(t for t in (smart_unicode(tag) \
                                    for tag in exif['Iptc.Application2.Keywords']) if t)
                    except KeyError: pass
                    try: title = smart_unicode(title or exif['Iptc.Application2.ObjectName'])
                    except KeyError: pass
                    try: description = smart_unicode(description or \
                            exif['Iptc.Application2.Caption'])
                    except KeyError: pass
                    try: description = smart_unicode(description or \
                            exif['Exif.Image.ImageDescription'])
                    except KeyError: pass
                except IOError:
                    pass
            except IOError:
                pass

        def to_bool(value, yes = 'true', no = 'false'):
            if value in [True, 'yes', 1, 'true']:
                return yes
            return no

        data = dict(
            title=smart_str(title),
            tags=smart_str(tags),
            description=smart_str(description),
            access_type=ACCESS.tostring(access_type),
            disable_comments=to_bool(disable_comments),
            xxx=to_bool(xxx),
            hide_orig=to_bool(hide_orig),
            storage_private=to_bool(storage_private),
            pub_channel='Python API',
            app_platform=sys.platform,
            app_version=__version__,
        )
        files = dict(
            image=open(smart_unicode(filename), 'rb'),
        )

        response = self._post(
            album.links['photos'],
            data=data,
            files=files,
            extra_headers=dict(
                Slug = os.path.basename(filename)
            ),
        )
        return Photo(self, response)
コード例 #24
0
def read_exif():
    i = Image("imgs/2.jpg")
    print(i.read_exif())
    print(i.read_iptc())
    print(i.read_xmp())
コード例 #25
0
from pyexiv2 import Image

img = Image(r'.\pyexiv2\tests\1.jpg')
img.read_exif()
img.read_iptc()
img.read_xmp()
img.read_raw_xmp()

img.clear_exif()
img.read_exif()

img.modify_exif({'Exif.Image.Make': 'test-中文-', 'Exif.Image.Rating': ''})
img.read_exif()

dict1 = {
    "Xmp.xmp.CreateDate": "2019-06-23T19:45:17.834",
    "Xmp.xmp.Rating": "",
    "Xmp.dc.subject": ["tag1", "tag2", "tag3"]
}
img.modify_xmp(dict1)

img.close()

from pyexiv2 import ImageData

with open(r'.\pyexiv2\tests\1.jpg', 'rb') as f:
    with ImageData(f.read()) as img:
        data = img.read_exif()

with open(r'.\pyexiv2\tests\1.jpg', 'rb+') as f:
    with ImageData(f.read()) as img:
コード例 #26
0
from pyexiv2 import Image

img = Image('WechatIMG3.jpeg')
data = img.read_exif()
data = str(data).replace('.', ' ')
with open('1.txt', mode='w', encoding='utf-8') as f:
    f.write((data))
img.close()
コード例 #27
0
        img = cv2.imread(file.path)
        img = get_grayscale(img)
        #img=thresholding(img)
        img = dilate(img)

        d = pytesseract.image_to_data(img, output_type=Output.DICT)

        for i in range(len(d['text'])):
            if d['text'][i] == 'GARMIN':
                find = True
                day = d['text'][i + 1]
                hour = d['text'][i + 2]
                lat = float(d['text'][i + 3])
                lon = float(d['text'][i + 4])

                img = Image(file.path)
                exif_lat = str(int(lat)) + "/1 " + str(int(
                    lat % 1 * 60)) + "/1 " + str(
                        int(round((lat % 1 * 60) % 1 * 60, 4) * 100)) + "/100"
                exif_lon = str(int(lon)) + "/1 " + str(int(
                    lon % 1 * 60)) + "/1 " + str(
                        int(round((lon % 1 * 60) % 1 * 60, 4) * 100)) + "/100"
                if int(lat) < 0:
                    exif_lat_ref = 'S'
                else:
                    exif_lat_ref = 'N'

                if int(lon) < 0:
                    exif_lon_ref = 'W'
                else:
                    exif_lon_ref = 'E'
コード例 #28
0
def edit_exif():
    i = Image("imgs/1.jpg")
    _dict = {"Exif.Image.Copyright": "津云"}
    i.modify_exif(_dict)
コード例 #29
0
def main():
    sort = list()
    for root, directories, filenames in os.walk(
            sorting_dir):  # Create a list of all files in "path"
        for filename in filenames:
            f = os.path.join(root, filename)
            if osp.splitext(f)[1].casefold() not in [".mp4", ".jpg", ".jpeg"]:
                print(f"Not handling:  {f}")
                continue
            sort.append(f)
    print(f"Sorting {len(sort)} file(s)")

    failed = list()
    copied = dict()

    for f in sort:
        # split the name by _ and extract required information
        fname = osp.basename(f)
        ftype = osp.splitext(fname)[1].casefold()

        print(f"Checking: {fname}")

        try:  # try to get the creation date, else add it to the failed list
            ## get jpgs and mp4 files only
            if ftype in [".jpg", ".jpeg"]:
                fpath = images_dir
                name_prefix = "IMG"

                out = probe(f, show_frames=None)
                try:  # try using ffprobe
                    creation_date = out['frames'][0]['tags'][
                        'DateTimeOriginal']
                except:
                    try:  # try using pyexiv 2
                        img = Image(f)
                    except:  # if reading fails, it might still have the information, because it's weird
                        pass
                    creation_date = img.read_exif()["Exif.Image.DateTime"]

            elif ftype == ".mp4":
                name_prefix = "VID"
                fpath = videos_dir
                out = probe(f)
                creation_date = out['format']['tags']['creation_time']
            else:
                print("Not handling")
                continue
        except:
            failed.append(f)
            continue

        ## get the date parts from the creation_date
        fyear = creation_date[:4]
        fmonth = creation_date[5:7]
        fday = creation_date[8:10]
        fhour = creation_date[11:13]
        fminute = creation_date[14:16]
        fsecond = creation_date[17:19]

        # create a datetime object from the file name info
        fdate = datetime(int(fyear), int(fmonth), int(fday), int(fhour),
                         int(fminute), int(fsecond))
        new_name = f"{name_prefix}_{fyear}{fmonth}{fday}_{fhour}{fminute}{fsecond}"

        # this variable will be an empty string if separate_files is False, else it's equal to fpath
        basename = fpath if separate_filetypes else ""

        # use a splat operator to join every element of the path_format list
        pre_formatted_path = osp.join(*path_format)
        path = osp.join(fdate.strftime(pre_formatted_path), basename)

        os.makedirs(
            path, exist_ok=True)  # make directories, unless they already exist

        new_path = osp.join(
            path, f"{new_name}"
        )  # the path of the file after being copied without the extension

        ## check if the file already exists
        check_name = f"{new_path}{ftype}"
        if osp.isfile(check_name) and check_name not in copied:
            print(f"File already exists:  {check_name}")
            continue

        new_file = copyfile(f, new_path, ftype)
        print(f"Copyied file:  {f} → {new_file}")

        copied[new_file] = f

        if not copy_files:  # delete old files?
            os.remove(floc)

    for f in failed:
        print(f)
コード例 #30
0
def write_exif(pic_path, exif_data):
    img = Image(pic_path)
    img.clear_exif()  #这里为防止两套数据冲突清空了已有的原exif
    img.modify_exif(exif_data)
    img.close()
コード例 #31
0
ファイル: cai.py プロジェクト: Coderxiaobai1/TolearnC-
from pyexiv2 import Image
i = Image('DJI_0294.JPG')
Information = i.read_exif()
for keys, values in Information.items():
    print(keys + ':' + values + '\n')
print('*********************')
for keys, values in i.read_xmp().items():
    print(keys + ':' + values + '\n')
コード例 #32
0
ファイル: wutsdis.py プロジェクト: marcelklehr/wutsdis
def write_metadata(path, tags):
    i = Image(path)
    i.modify_xmp({'Xmp.dc.subject': tags})
コード例 #33
0
entries = os.scandir(path)

indexFile = open(path + "\\index.txt", mode="r", encoding="utf-8")
os.mkdir(path + "\\to_delete\\")

next_date_for_pictures = ''
num_photos_with_date = 0

while True:
    fileName = indexFile.readline().strip()
    description = indexFile.readline().strip()
    dateTaken = indexFile.readline().strip()
    if not dateTaken: break  # EOF

    if description != 'delete':
        metadata = Image(path + "\\" + fileName)
        xmp = {'Xmp.dc.description': description}
        metadata.modify_xmp(xmp)

        if dateTaken == next_date_for_pictures:
            # add a second to make the next picture think that it comes next
            split_date = dateTaken.split(":")
            minutes = split_date[3]
            split_date[3] = str(int(minutes) + num_photos_with_date).zfill(2)
            num_photos_with_date += 1
            dateTaken = ":".join(split_date)
        else:
            num_photos_with_date = 1
            next_date_for_pictures = dateTaken

        exif = {
コード例 #34
0
ファイル: sample.py プロジェクト: mrghz/pyexiv2
from pyexiv2 import Image

img = Image(r'.\pyexiv2\tests\1.jpg')

img.read_exif()
img.read_iptc()
img.read_xmp()
img.read_raw_xmp()

img.modify_exif({'Exif.Image.Make': 'test-中文-', 'Exif.Image.Rating': ''})
img.read_exif()

img.clear_exif()
img.read_exif()

dict1 = {"Xmp.xmp.CreateDate": "2019-06-23T19:45:17.834",
         "Xmp.xmp.Rating": "",
         "Xmp.dc.subject": ["flag1中文", "flag2中文", "flag3中文"]}
img.modify_xmp(dict1)

img.close()