Comandante Publicado 2 de Agosto de 2010 Compartir Publicado 2 de Agosto de 2010 Hola No sabía donde poner este post, asi que lo comienzo aquí y si no tiene interés, pues que se quede aquí tb. No se cuanto uso haceis de las hojas de contactos y como las generais (PS u otros programas). Soy usuario de PS, pero tb por desgracia programador :) asi que el otro día me aburría por la tarde y me dije: ¿Sería útil una pequeña aplicación para windows a la que le indiquemos una carpeta y nos genere una hoja de contactos en word lista para imprimir y/o guardar y/o enviar por correo? Esa es la pregunta que os traslado y si creeis que es interesante os puedo pasar la aplicación o alguna muestra de los documentos generados. Funciona de la siguiente manera, le indicamos la carpeta y nos genera la hoja de contactos de 2 posibles maneras. 1.- Las imagenes y el nombre en 5 columnas. 2.- En dos columnas, cada imagen con los datos exif al lado. Bueno, espero cualquier comentario, propuesta, petición... un saludo Citar Enlace al comentario Compartir en otros sitios web Mas opciones de compartir...
Anna Publicado 2 de Agosto de 2010 Compartir Publicado 2 de Agosto de 2010 Me parece una buena idea. De hecho yo ya abrí un documento Word con varias columnas y filas y voy pasando la información que particularmente me interesa. Es muy práctico porque mediante el busca te situas en el lugar que te interesa. No sé si te refieres a esto, más o menos. Citar Enlace al comentario Compartir en otros sitios web Mas opciones de compartir...
Comandante Publicado 2 de Agosto de 2010 Autor Compartir Publicado 2 de Agosto de 2010 Hola Anna Te comento, mi idea es hacer algo así: Uploaded with ImageShack.us La parte de arriba sería un documento con cada imagen y los datos exif al lado (en la imagen solo tiene exif la primera foto) La parte de abajo sería un documento con las imagenes y el nombre. Pero bueno, por eso pregunto... estoy abierto a cualquier propuesta. Por cierto para este ejemplo he usado alguna foto que he sacado de aquí de los foros, espero que nadie se moleste, ya que son miniaturas muy pequeñas, si alguien se molesta, lo evitaré para la proxima vez :) ... un saludo Citar Enlace al comentario Compartir en otros sitios web Mas opciones de compartir...
FLA Publicado 2 de Agosto de 2010 Compartir Publicado 2 de Agosto de 2010 Buenas.... A mi me interesa principalmente la extracción de los datos EXIF..puedes poner el código por favor?????? Gracias por el aporte...... Un saludo Citar Enlace al comentario Compartir en otros sitios web Mas opciones de compartir...
Comandante Publicado 3 de Agosto de 2010 Autor Compartir Publicado 3 de Agosto de 2010 Buenas....A mi me interesa principalmente la extracción de los datos EXIF..puedes poner el código por favor?????? Gracias por el aporte...... Un saludo Hola, aún no puedo poner el codigo porque no esta terminado y falta depurarlo un poco (las cosas o se hacen bien o no se hacen ) te pongo este enlace que me sirvió de guía, de hecho si buscas en google veras cien mil maneras de extraer los exif en cualquier lenguaje. http://www.spaz.com/mr/work/aspexiffuncs/ un saludo Citar Enlace al comentario Compartir en otros sitios web Mas opciones de compartir...
FLA Publicado 3 de Agosto de 2010 Compartir Publicado 3 de Agosto de 2010 Hola, aún no puedo poner el codigo porque no esta terminado y falta depurarlo un poco (las cosas o se hacen bien o no se hacen ) te pongo este enlace que me sirvió de guía, de hecho si buscas en google veras cien mil maneras de extraer los exif en cualquier lenguaje. http://www.spaz.com/mr/work/aspexiffuncs/ un saludo La que utilizo yo.......... Contenido de la clase ExifReader.cls Saludos...... Option Explicit Private ExifTemp() As Byte Private Offset_to_IFD0 As Long Private Offset_to_APP1 As Long Private Offset_to_TIFF As Long Private Length_of_APP1 As Long Private Offset_to_Next_IFD As Long Private IFDDirectory() As IFD_Data Private Offset_to_ExifSubIFD As Long Private m_Tag As Long Private m_file As String Private IsLoaded As Boolean Private Enum EXIF_DATA_FORMAT m_BYTE = 1 m_STRING = 2 m_SHORT = 3 m_LONG = 4 m_RATIONAL = 5 m_SBYTE = 6 m_UNDEFINED = 7 m_SSHORT = 8 m_SLONG = 9 m_SRATIONAL = 10 m_SINGLE = 11 m_DOUBLE = 12 End Enum Private Type IFD_Data_Values BytVal As Byte StrVal As String IntVal As Integer LngVal As Long SngVal As Single DblVal As Double End Type Private Type IFD_Data Tag_No As EXIF_TAG MakerNote As Boolean Data_Format As EXIF_DATA_FORMAT Components As Long Offset_To_Value As Long Value As Variant End Type Public Enum EXIF_TAG 'IFD0 Tags ImageDescription = &H10E& Make = &H10F& Model = &H110& Orientation = &H112& XResolution = &H11A& YResolution = &H11B& ResolutionUnit = &H128& Software = &H131& DateTime = &H132& WhitePoint = &H13E& PrimaryChromaticities = &H13F& YCbCrCoefficients = &H211& YCbCrPositioning = &H213& ReferenceBlackWhite = &H214& Copyright = &H8298& ExifOffset = &H8769& 'ExifSubIFD Tags ExposureTime = &H829A& FNumber = &H829D& ExposureProgram = &H8822& ISOSpeedRatings = &H8827& ExifVersion = &H9000& DateTimeOriginal = &H9003& DateTimeDigitized = &H9004& ComponentsConfiguration = &H9101& CompressedBitsPerPixel = &H9102& ShutterSpeedValue = &H9201& ApertureValue = &H9202& BrightnessValue = &H9203& ExposureBiasValue = &H9204& MaxApertureValue = &H9205& SubjectDistance = &H9206& MeteringMode = &H9207& LightSource = &H9208& Flash = &H9209& FocalLength = &H920A& MakerNote = &H927C& UserComment = &H9286& SubsecTime = &H9290& SubsecTimeOriginal = &H9291& SubsecTimeDigitized = &H9292& FlashPixVersion = &HA000& ColorSpace = &HA001& ExifImageWidth = &HA002& ExifImageHeight = &HA003& RelatedSoundFile = &HA004& ExifInteroperabilityOffset = &HA005& FocalPlaneXResolution = &HA20E& FocalPlaneYResolution = &HA20F& FocalPlaneResolutionUnit = &HA210& ExposureIndex = &HA215& SensingMethod = &HA217& FileSource = &HA300& SceneType = &HA301& CFAPattern = &HA302& 'Interoperability IFD Tags InteroperabilityIndex = &H1& InteroperabilityVersion = &H2& RelatedImageFileFormat = &H1000& RelatedImageWidth = &H1001& RelatedImageLength = &H1002& 'IFD1 Tags ImageWidth = &H100& ImageHeight = &H101& BitsPerSample = &H102& Compression = &H103& PhotometricInterpretation = &H106& StripOffsets = &H111& SamplePerPixel = &H115& RowsPerStrip = &H116& StripByteCounts = &H117& XResolution2 = &H11A& YResolution2 = &H11B& PlanarConfiguration = &H11C& ResolutionUnit2 = &H128& JPEGInterchangeFormat = &H201& JPEGInterchangeFormatLength = &H202& YCbCrCoeffecients = &H211& YCbCrSubSampling = &H212& YCbCrPositioning2 = &H213& ReferenceBlackWhite2 = &H214& 'Misc Tags NewSubfileType = &HFE& SubfileType = &HFF& TransferFunction = &H12D& Artist = &H13B& Predictor = &H13D& TileWidth = &H142& TileLength = &H143& TileOffsets = &H144& TileByteCounts = &H145& SubIFDs = &H14A& JPEGTables = &H15B& CFARepeatPatternDim = &H828D& CFAPattern2 = &H828E& BatteryLevel = &H828F& IPTC_NAA = &H83BB& InterColorProfile = &H8773& SpectralSensitivity = &H8824& GPSInfo = &H8825& OECF = &H8828& Interlace = &H8829& TimeZoneOffset = &H882A& SelfTimerMode = &H882B& FlashEnergy = &H920B& SpatialFrequencyResponse = &H920C& Noise = &H920D& ImageNumber = &H9211& SecurityClassification = &H9212& ImageHistory = &H9213& SubjectLocation = &H9214& ExposureIndex2 = &H9215& TIFFEPStandardID = &H9216& FlashEnergy2 = &HA20B& SpatialFrequencyResponse2 = &HA20C& SubjectLocation2 = &HA214& End Enum Public Property Let picFile(picFile As String) m_file = picFile End Property Public Property Get MakerNoteTag(Optional ByVal MakerTag As Long) As Variant If IsLoaded = False Then Exit Property Dim i As Long For i = 1 To UBound(IFDDirectory) If IFDDirectory(i).Tag_No = MakerTag And IFDDirectory(i).MakerNote = True Then MakerNoteTag = IFDDirectory(i).Value Exit For End If Next End Property Public Property Get Tag(Optional ByVal ExifTag As EXIF_TAG) As Variant If IsLoaded = False And m_file <> "" Then Load (m_file) ElseIf IsLoaded = False And m_file = "" Then Exit Property End If If ExifTag = 0 Then On Error Resume Next Tag = UBound(IFDDirectory) On Error GoTo 0 Exit Property End If Dim i As Long For i = 1 To UBound(IFDDirectory) If IFDDirectory(i).Tag_No = ExifTag Then 'IFDDirectory(i).Value = "CACANON" Tag = IFDDirectory(i).Value Exit For End If Next End Property Public Sub Load(Optional ByVal picFile As String) If m_file = "" Then m_file = picFile If m_file = "" Then Exit Sub End If End If OpenJPGFile m_file If InspectJPGFile = False Then IsLoaded = False Exit Sub End If If IsIntel Then Offset_to_IFD0 = _ ExifTemp(Offset_to_APP1 + 17) * 256& * 256& * 256& + _ ExifTemp(Offset_to_APP1 + 16) * 256& * 256& + _ ExifTemp(Offset_to_APP1 + 15) * 256& + _ ExifTemp(Offset_to_APP1 + 14) Else Offset_to_IFD0 = _ ExifTemp(Offset_to_APP1 + 14) * 256& * 256& * 256& + _ ExifTemp(Offset_to_APP1 + 15) * 256& * 256& + _ ExifTemp(Offset_to_APP1 + 16) * 256& + _ ExifTemp(Offset_to_APP1 + 17) End If 'Debug.Print "Offset_to_IFD0: " & Offset_to_IFD0 IsLoaded = True GetDirectoryEntries Offset_to_TIFF + Offset_to_IFD0 End Sub Private Function OpenJPGFile(ByVal inFile As String) Dim fFile As Integer fFile = FreeFile Open inFile For Binary As #fFile ReDim ExifTemp(LOF(fFile)) As Byte Get #fFile, , ExifTemp Close #fFile End Function Private Function InspectJPGFile() As Boolean Dim i As Long If ExifTemp(0) <> &HFF And ExifTemp(1) <> &HD8 Then InspectJPGFile = False Else For i = 2 To UBound(ExifTemp) - 1 If ExifTemp(i) = &HFF And ExifTemp(i + 1) = &HE1 Then Offset_to_APP1 = i Exit For End If Next If Offset_to_APP1 = 0 Then InspectJPGFile = False End If Offset_to_TIFF = Offset_to_APP1 + 10 Length_of_APP1 = _ ExifTemp(Offset_to_APP1 + 2) * 256& + _ ExifTemp(Offset_to_APP1 + 3) If Chr(ExifTemp(Offset_to_APP1 + 4)) & Chr(ExifTemp(Offset_to_APP1 + 5)) & _ Chr(ExifTemp(Offset_to_APP1 + 6)) & Chr(ExifTemp(Offset_to_APP1 + 7)) <> "Exif" Then InspectJPGFile = False Exit Function End If InspectJPGFile = True End If End Function Private Function IsIntel() As Boolean If Hex(ExifTemp(Offset_to_TIFF)) = "49" Then IsIntel = True Else IsIntel = False End If End Function Private Function sPad(sSrc As String, nSize As Integer, sPadChar As String) As String If Len(sSrc) < nSize Then sPad = String(nSize - Len(sSrc), sPadChar) & sSrc Else sPad = sSrc End If End Function Private Sub GetDirectoryEntries(Offset As Long) Dim No_of_Entries As Long Dim Upper_IFDDirectory As Long Dim NewDimensions As Long Dim Processed_ExifSubIFD As Boolean Dim BytesPerComponent As Long Dim Offset_to_MakerNote As Long Dim i As Long, j As Long Do If IsIntel Then No_of_Entries = _ ExifTemp(Offset + 1) * 256& + _ ExifTemp(Offset + 0) Else No_of_Entries = _ ExifTemp(Offset + 0) * 256& + _ ExifTemp(Offset + 1) End If On Error Resume Next Upper_IFDDirectory = UBound(IFDDirectory) On Error GoTo 0 NewDimensions = Upper_IFDDirectory + No_of_Entries ReDim Preserve IFDDirectory(1 To NewDimensions) As IFD_Data For i = 1 To No_of_Entries With IFDDirectory(Upper_IFDDirectory + i) If IsIntel Then .Tag_No = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 1) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 0) .Data_Format = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 3) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 2) .Components = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 7) * 256& * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 6) * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 5) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 4) Select Case .Data_Format Case m_BYTE, m_SBYTE BytesPerComponent = 1 If .Components * BytesPerComponent <= 4 Then .Value = _ sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)), 2, "0") & _ sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 10)), 2, "0") & _ sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 9)), 2, "0") & _ sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)), 2, "0") Else .Offset_To_Value = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) For j = 0 To .Components - 1 .Value = .Value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j) Next End If Case m_STRING, m_UNDEFINED BytesPerComponent = 1 If .Components * BytesPerComponent <= 4 Then .Value = _ Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)) & _ Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 10)) & _ Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 9)) & _ Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)) Else .Offset_To_Value = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) For j = 0 To .Components - 2 .Value = .Value & Chr(ExifTemp(Offset_to_TIFF + .Offset_To_Value + j)) Next End If Case m_SHORT, m_SSHORT BytesPerComponent = 2 If .Components * BytesPerComponent <= 4 Then .Value = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) '.Value = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) Else .Offset_To_Value = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) For j = 0 To .Components - 1 .Value = .Value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j) Next End If Case m_LONG, m_SLONG BytesPerComponent = 4 If .Components * BytesPerComponent <= 4 Then .Value = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) Else .Offset_To_Value = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) For j = 0 To .Components - 1 .Value = .Value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j) Next End If Case m_RATIONAL, m_SRATIONAL BytesPerComponent = 8 .Offset_To_Value = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) .Value = _ ExifTemp(Offset_to_TIFF + .Offset_To_Value + 3) * 256& * 256& * 256& + _ ExifTemp(Offset_to_TIFF + .Offset_To_Value + 2) * 256& * 256& + _ ExifTemp(Offset_to_TIFF + .Offset_To_Value + 1) * 256& + _ ExifTemp(Offset_to_TIFF + .Offset_To_Value + 0) & _ "/" & _ ExifTemp(Offset_to_TIFF + .Offset_To_Value + 7) * 256& * 256& * 256& + _ ExifTemp(Offset_to_TIFF + .Offset_To_Value + 6) * 256& * 256& + _ ExifTemp(Offset_to_TIFF + .Offset_To_Value + 5) * 256& + _ ExifTemp(Offset_to_TIFF + .Offset_To_Value + 4) End Select Else .Tag_No = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 0) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 1) .Data_Format = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 2) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 3) .Components = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 4) * 256& * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 5) * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 6) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 7) Select Case .Data_Format Case m_BYTE, m_SBYTE BytesPerComponent = 1 If .Components * BytesPerComponent <= 4 Then .Value = _ sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)), 2, "0") & _ sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 9)), 2, "0") & _ sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 10)), 2, "0") & _ sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)), 2, "0") Else .Offset_To_Value = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) For j = 0 To .Components - 1 .Value = .Value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j) Next End If Case m_STRING, m_UNDEFINED BytesPerComponent = 1 If .Components * BytesPerComponent <= 4 Then .Value = _ Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)) & _ Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 9)) & _ Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 10)) & _ Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)) Else .Offset_To_Value = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) For j = 0 To .Components - 1 .Value = .Value & Chr(ExifTemp(Offset_to_TIFF + .Offset_To_Value + j)) Next End If Case m_SHORT, m_SSHORT BytesPerComponent = 2 If .Components * BytesPerComponent <= 4 Then .Value = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) Else .Offset_To_Value = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) For j = .Components - 1 To 0 Step -1 .Value = .Value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j) Next End If Case m_LONG, m_SLONG BytesPerComponent = 4 If .Components * BytesPerComponent <= 4 Then .Value = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) Else .Offset_To_Value = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) For j = 0 To .Components - 1 .Value = .Value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j) Next End If Case m_RATIONAL, m_SRATIONAL BytesPerComponent = 8 .Offset_To_Value = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) .Value = _ ExifTemp(Offset_to_TIFF + .Offset_To_Value + 0) * 256& * 256& * 256& + _ ExifTemp(Offset_to_TIFF + .Offset_To_Value + 1) * 256& * 256& + _ ExifTemp(Offset_to_TIFF + .Offset_To_Value + 2) * 256& + _ ExifTemp(Offset_to_TIFF + .Offset_To_Value + 3) & _ "/" & _ ExifTemp(Offset_to_TIFF + .Offset_To_Value + 4) * 256& * 256& * 256& + _ ExifTemp(Offset_to_TIFF + .Offset_To_Value + 5) * 256& * 256& + _ ExifTemp(Offset_to_TIFF + .Offset_To_Value + 6) * 256& + _ ExifTemp(Offset_to_TIFF + .Offset_To_Value + 7) End Select End If 'Debug.Print Upper_IFDDirectory + i & ".Tag_No: " & .Tag_No & _ "; .Data_Format: " & .Data_Format & _ "; .Components: " & .Components & _ "; .Offset_To_Value: " & .Offset_To_Value & _ "; .Value: " & .Value If .Tag_No = MakerNote Then Offset_to_MakerNote = .Offset_To_Value End If If .Tag_No = ExifOffset Then Offset_to_ExifSubIFD = CLng(.Value) 'Debug.Print "Offset_to_ExifSubIFD: " & Offset_to_ExifSubIFD End If End With Next If IsIntel Then If Not Processed_ExifSubIFD Then Offset_to_Next_IFD = _ ExifTemp(Offset + 2 + (No_of_Entries * 12) + 3) * 256& * 256& * 256& + _ ExifTemp(Offset + 2 + (No_of_Entries * 12) + 2) * 256& * 256& + _ ExifTemp(Offset + 2 + (No_of_Entries * 12) + 1) * 256& + _ ExifTemp(Offset + 2 + (No_of_Entries * 12) + 0) 'Debug.Print "Offset_to_Next_IFD: " & Offset_to_Next_IFD Else Offset_to_Next_IFD = 0 End If Else If Not Processed_ExifSubIFD Then Offset_to_Next_IFD = _ ExifTemp(Offset + 2 + (No_of_Entries * 12) + 0) * 256& * 256& * 256& + _ ExifTemp(Offset + 2 + (No_of_Entries * 12) + 1) * 256& * 256& + _ ExifTemp(Offset + 2 + (No_of_Entries * 12) + 2) * 256& + _ ExifTemp(Offset + 2 + (No_of_Entries * 12) + 3) 'Debug.Print "Offset_to_Next_IFD: " & Offset_to_Next_IFD Else Offset_to_Next_IFD = 0 End If End If If Offset_to_Next_IFD = 0 And Processed_ExifSubIFD = False Then Offset_to_Next_IFD = Offset_to_ExifSubIFD Processed_ExifSubIFD = True End If Offset = Offset_to_TIFF + Offset_to_Next_IFD Loop While Offset_to_Next_IFD <> 0 'If Offset_to_MakerNote <> 0 Then 'ProcessMakerNote Offset_to_MakerNote + Offset_to_TIFF 'End If End Sub Private Sub ProcessMakerNote(ByVal Offset As Long) Dim No_of_Entries As Long Dim Upper_IFDDirectory As Long Dim NewDimensions As Long Dim BytesPerComponent As Long Dim i As Long, j As Long If IsIntel Then No_of_Entries = _ ExifTemp(Offset + 1) * 256& + _ ExifTemp(Offset + 0) Else No_of_Entries = _ ExifTemp(Offset + 0) * 256& + _ ExifTemp(Offset + 1) End If On Error Resume Next Upper_IFDDirectory = UBound(IFDDirectory) On Error GoTo 0 NewDimensions = Upper_IFDDirectory + No_of_Entries ReDim Preserve IFDDirectory(1 To NewDimensions) As IFD_Data For i = 1 To No_of_Entries With IFDDirectory(Upper_IFDDirectory + i) If IsIntel Then .Tag_No = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 1) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 0) .MakerNote = True .Data_Format = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 3) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 2) .Components = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 7) * 256& * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 6) * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 5) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 4) Select Case .Data_Format Case m_BYTE, m_SBYTE BytesPerComponent = 1 If .Components * BytesPerComponent <= 4 Then .Value = _ sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)), 2, "0") & _ sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 10)), 2, "0") & _ sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 9)), 2, "0") & _ sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)), 2, "0") Else .Offset_To_Value = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) For j = 0 To .Components - 1 .Value = .Value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j) Next End If Case m_STRING, m_UNDEFINED BytesPerComponent = 1 If .Components * BytesPerComponent <= 4 Then .Value = _ Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)) & _ Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 10)) & _ Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 9)) & _ Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)) Else .Offset_To_Value = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) For j = 0 To .Components - 2 .Value = .Value & Chr(ExifTemp(Offset_to_TIFF + .Offset_To_Value + j)) Next End If Case m_SHORT, m_SSHORT BytesPerComponent = 2 If .Components * BytesPerComponent <= 4 Then .Value = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) '.Value = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) Else .Offset_To_Value = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) For j = 0 To .Components - 1 .Value = .Value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j) Next End If Case m_LONG, m_SLONG BytesPerComponent = 4 If .Components * BytesPerComponent <= 4 Then .Value = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) Else .Offset_To_Value = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) For j = 0 To .Components - 1 .Value = .Value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j) Next End If Case m_RATIONAL, m_SRATIONAL BytesPerComponent = 8 .Offset_To_Value = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) .Value = _ ExifTemp(Offset_to_TIFF + .Offset_To_Value + 3) * 256& * 256& * 256& + _ ExifTemp(Offset_to_TIFF + .Offset_To_Value + 2) * 256& * 256& + _ ExifTemp(Offset_to_TIFF + .Offset_To_Value + 1) * 256& + _ ExifTemp(Offset_to_TIFF + .Offset_To_Value + 0) & _ "/" & _ ExifTemp(Offset_to_TIFF + .Offset_To_Value + 7) * 256& * 256& * 256& + _ ExifTemp(Offset_to_TIFF + .Offset_To_Value + 6) * 256& * 256& + _ ExifTemp(Offset_to_TIFF + .Offset_To_Value + 5) * 256& + _ ExifTemp(Offset_to_TIFF + .Offset_To_Value + 4) End Select Else .Tag_No = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 0) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 1) .Data_Format = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 2) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 3) .Components = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 4) * 256& * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 5) * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 6) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 7) Select Case .Data_Format Case m_BYTE, m_SBYTE BytesPerComponent = 1 If .Components * BytesPerComponent <= 4 Then .Value = _ sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)), 2, "0") & _ sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 9)), 2, "0") & _ sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 10)), 2, "0") & _ sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)), 2, "0") Else .Offset_To_Value = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) For j = 0 To .Components - 1 .Value = .Value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j) Next End If Case m_STRING, m_UNDEFINED BytesPerComponent = 1 If .Components * BytesPerComponent <= 4 Then .Value = _ Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)) & _ Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 9)) & _ Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 10)) & _ Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)) Else .Offset_To_Value = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) For j = 0 To .Components - 1 .Value = .Value & Chr(ExifTemp(Offset_to_TIFF + .Offset_To_Value + j)) Next End If Case m_SHORT, m_SSHORT BytesPerComponent = 2 If .Components * BytesPerComponent <= 4 Then .Value = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) Else .Offset_To_Value = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) For j = .Components - 1 To 0 Step -1 .Value = .Value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j) Next End If Case m_LONG, m_SLONG BytesPerComponent = 4 If .Components * BytesPerComponent <= 4 Then .Value = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) Else .Offset_To_Value = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) For j = 0 To .Components - 1 .Value = .Value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j) Next End If Case m_RATIONAL, m_SRATIONAL BytesPerComponent = 8 .Offset_To_Value = _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _ ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) .Value = _ ExifTemp(Offset_to_TIFF + .Offset_To_Value + 0) * 256& * 256& * 256& + _ ExifTemp(Offset_to_TIFF + .Offset_To_Value + 1) * 256& * 256& + _ ExifTemp(Offset_to_TIFF + .Offset_To_Value + 2) * 256& + _ ExifTemp(Offset_to_TIFF + .Offset_To_Value + 3) & _ "/" & _ ExifTemp(Offset_to_TIFF + .Offset_To_Value + 4) * 256& * 256& * 256& + _ ExifTemp(Offset_to_TIFF + .Offset_To_Value + 5) * 256& * 256& + _ ExifTemp(Offset_to_TIFF + .Offset_To_Value + 6) * 256& + _ ExifTemp(Offset_to_TIFF + .Offset_To_Value + 7) End Select End If End With Next End Sub Citar Enlace al comentario Compartir en otros sitios web Mas opciones de compartir...
Comandante Publicado 3 de Agosto de 2010 Autor Compartir Publicado 3 de Agosto de 2010 Muy buena esa clase FLA... Como decia yo lo tengo aun a medias, de hecho no contemplaba todos los datos exif, sino que me centraba en los que consideraba mas practicos. Actualmente en mi Hoja de contactos estaba sacando los siguientes: "DateTimeOriginal" "ExifImageWidth "ExifImageHeight "ExposureTime" "FNumber" "FocalLength" "ISOSpeedRatings" "MeteringMode" "SensingMethod" Se admiten sugerencias para añadir o quitar alguno... un saludo Citar Enlace al comentario Compartir en otros sitios web Mas opciones de compartir...
milucho Publicado 3 de Agosto de 2010 Compartir Publicado 3 de Agosto de 2010 Me parece una excelente idea, y los exif tambien creo que seria suficiente los basicos. Yo como de programacion "0" espero ansioso a ver los resultados. Saludos Citar Enlace al comentario Compartir en otros sitios web Mas opciones de compartir...
FLA Publicado 3 de Agosto de 2010 Compartir Publicado 3 de Agosto de 2010 Muy buena esa clase FLA...Como decia yo lo tengo aun a medias, de hecho no contemplaba todos los datos exif, sino que me centraba en los que consideraba mas practicos. Actualmente en mi Hoja de contactos estaba sacando los siguientes: "DateTimeOriginal" "ExifImageWidth "ExifImageHeight "ExposureTime" "FNumber" "FocalLength" "ISOSpeedRatings" "MeteringMode" "SensingMethod" Se admiten sugerencias para añadir o quitar alguno... un saludo Buenas... Pienso que sería muy interesante añadir...: Numero de disparos de la cámara.. (shutercount.....) para que puedan verificar si han comprado una cámara nueva de verdad...... Informacion GPS... GPSInfo = &H8825& La idea es crear una aplicación capaz de meter los datos de un GPS en las fotos adquiridas con idea de georeferenciar las fotos. Me explico.... Si llevas un GPS adquiriendo datos de hora, fecha y posición...y una cámara haciendo fotos....lo fantástico seria poder unir ambos archivos..... Un programa que mirara los datos exif de fecha y hora....buscara en los tracks del GPS y metiera la info en las fotos cuando coincida fecha y hora.....no se si me explico.... Si a las 13:24 horas (datos exif de la foto) he tirado una foto y el log del GPS me indica una posición concreta a esa misma hora.....meto los datos del GPS en la foto y ya tengo una foto georeferenciada..... Así, podemos ofrecer a los compañeros que no disponen de entrada GPS en la cámara o GPS....de una herramienta que les ayude a georeferenciar sus fotos..... Un saludo Citar Enlace al comentario Compartir en otros sitios web Mas opciones de compartir...
fotoflipao Publicado 4 de Agosto de 2010 Compartir Publicado 4 de Agosto de 2010 Buena iniciativa. Estaré atento para ver dónde llega el asunto. Celebros previlegiados, sin duda... :) Citar Enlace al comentario Compartir en otros sitios web Mas opciones de compartir...
Comandante Publicado 5 de Agosto de 2010 Autor Compartir Publicado 5 de Agosto de 2010 Bueno FLA, entiendo lo que propones y si, puede ser interesante, el caso es que no dispongo de gps y no se que tipo de archivos manejan estos aparatos para procesar esa información, será cuestión de buscarlo por la web y preparar la versión 2 con esta 'feature' que indicas :) De momento la versión 1 la tengo mas o menos funcionando (me falta probarla en diferentes Sistemas operativos y corregir algun error que pueda surgir... de momento, funciona perfectamente en windows XP con office 2003). En cuanto lo tenga un poco mas atado lo pondré a vuestra disposición para que podáis probarlo y dar vuestra opinión o sugerir cualquier cosa. El funcionamiento actual es el siguiente: Se selecciona la ruta de la carpeta (o copìamos del explorador de windows y pegamos en el programa) que queremos extraer la hoja de contactos Seleccionamos el formato deseado, sólo hoja de contactos u Hoja de contactos con datos exif (ver imagenes de mensaje mas arriba) Le damos al botón y voilá nos genera un documento de word (no es instantaneo, tarda un poco, dependiendo del número de imagenes en la carpeta) un saludo Citar Enlace al comentario Compartir en otros sitios web Mas opciones de compartir...
FLA Publicado 5 de Agosto de 2010 Compartir Publicado 5 de Agosto de 2010 (editado) Bueno...todo se andará.... Mira este enlace antes de que vuele.... http://www.nikonistas.com/digital/foro/ind...showtopic=98197 Alli esta la tabla Excel de datos EXIF que diseñe.... Un saludo Editado 5 de Agosto de 2010 por FLA Citar Enlace al comentario Compartir en otros sitios web Mas opciones de compartir...
Comandante Publicado 5 de Agosto de 2010 Autor Compartir Publicado 5 de Agosto de 2010 Buena iniciativa FLA, a ver si prospera, que sería interesante tener ahi una pequeña base de datos con información útil. Me ha dado un aire un poco canalla y se me ha ocurrido añadir una restricción al programa... jeje Simplemente el programa detecta si la imagen está tirada con un 'aparato' Nikon y si no es así no la procesa, es decir no la incluye en el documento de word... a lo mejor es una memez, o quien sabe, igual Nikon quiere patrocinarme... jajaja Bueno, creo que al final no haré ninguna restricción ... se trataba de compartir esta 'utilidad' con quien quiera usarla, no de poner trabas a nadie... saludos Citar Enlace al comentario Compartir en otros sitios web Mas opciones de compartir...
AristotelesM Publicado 5 de Agosto de 2010 Compartir Publicado 5 de Agosto de 2010 Buenas...Pienso que sería muy interesante añadir...: Numero de disparos de la cámara.. (shutercount.....) para que puedan verificar si han comprado una cámara nueva de verdad...... Informacion GPS... GPSInfo = &H8825& La idea es crear una aplicación capaz de meter los datos de un GPS en las fotos adquiridas con idea de georeferenciar las fotos. Me explico.... Si llevas un GPS adquiriendo datos de hora, fecha y posición...y una cámara haciendo fotos....lo fantástico seria poder unir ambos archivos..... Un programa que mirara los datos exif de fecha y hora....buscara en los tracks del GPS y metiera la info en las fotos cuando coincida fecha y hora.....no se si me explico.... Si a las 13:24 horas (datos exif de la foto) he tirado una foto y el log del GPS me indica una posición concreta a esa misma hora.....meto los datos del GPS en la foto y ya tengo una foto georeferenciada..... Así, podemos ofrecer a los compañeros que no disponen de entrada GPS en la cámara o GPS....de una herramienta que les ayude a georeferenciar sus fotos..... Un saludo Pogramas para georefenciar fotografías ya existen, por ejemplo: FotoGPS y GPicSync Citar Enlace al comentario Compartir en otros sitios web Mas opciones de compartir...
mov Publicado 5 de Agosto de 2010 Compartir Publicado 5 de Agosto de 2010 Hola FLA Sería posible pasar a dll la clase y ya que no necesita de ninguna librería externa no tendrías ni que hacerle archivos de dependencias, luego bastaría implementarla en las propiedades del proyecto y usarla en la aplicación. Eso haría que incluso se abrieran los desplegables mientras escribes el código llamando a la clase. De todas formas voy a intentar copiar con tu permiso el código para ver que puedo hacer. Private Function OpenJPGFile(ByVal inFile As String) Dim fFile As Integer fFile = FreeFile Open inFile For Binary As #fFile ReDim ExifTemp(LOF(fFile)) As Byte Get #fFile, , ExifTemp Close #fFile End Function Por lo que veo a la clase solo le tienes que pasar el nombre completo del archivo, el se encarga de pasarlo mediante la variable inFile y le asigna un puntero de archivo libre para abrirlo y cargar los datos en la matriz ExifTemp. Corrígeme si me equivoco. Citar Enlace al comentario Compartir en otros sitios web Mas opciones de compartir...
FLA Publicado 5 de Agosto de 2010 Compartir Publicado 5 de Agosto de 2010 Hola FLA Sería posible pasar a dll la clase y ya que no necesita de ninguna librería externa no tendrías ni que hacerle archivos de dependencias, luego bastaría implementarla en las propiedades del proyecto y usarla en la aplicación. Eso haría que incluso se abrieran los desplegables mientras escribes el código llamando a la clase. De todas formas voy a intentar copiar con tu permiso el código para ver que puedo hacer. Private Function OpenJPGFile(ByVal inFile As String) Dim fFile As Integer fFile = FreeFile Open inFile For Binary As #fFile ReDim ExifTemp(LOF(fFile)) As Byte Get #fFile, , ExifTemp Close #fFile End Function Por lo que veo a la clase solo le tienes que pasar el nombre completo del archivo, el se encarga de pasarlo mediante la variable inFile y le asigna un puntero de archivo libre para abrirlo y cargar los datos en la matriz ExifTemp. Corrígeme si me equivoco. No hay problema..... Mandame un MP con tu correo y mañana te mando la DLL......y al que quiera tambien.... Para emplear la clase..... Un ejemplo: en este caso para VBA en excel que puedes encontrar en http://www.nikonistas.com/digital/foro/ind...showtopic=98197 '---------------------------------------- Dim objExif As New ExifReader Dim txtExifInfo As String '---------------------------------------- Private Sub CommandButton1_Click() CommonDialog1.InitDir = "C:\Documents and Settings" CommonDialog1.Filter = "Archivos de Imagen .jpg|*.jpg" CommonDialog1.ShowOpen If CommonDialog1.Filename = "" Then Exit Sub Hoja1.Image1.Picture = LoadPicture(CommonDialog1.Filename) Hoja1.Image1.PictureSizeMode = fmPictureSizeModeStretch objExif.Load CommonDialog1.Filename 'extraccion de datos EXIF: On Error Resume Next fila = 2 While Hoja1.Cells(fila, 1) <> "" Hoja1.Cells(fila, 3) = objExif.Tag(Hoja1.Cells(fila, 2)) fila = fila + 1 Wend End Sub Citar Enlace al comentario Compartir en otros sitios web Mas opciones de compartir...
Comandante Publicado 6 de Agosto de 2010 Autor Compartir Publicado 6 de Agosto de 2010 Bueno a ver si lo pruebo un poco para poder subirlo este fin de semana. esto es un boceto de la pantalla (hay que hacerlo un poco mas bonito), para que al menos entendais el funcionamiento. Unicamente, seleccionamos la carpeta o directamente copiamos y pegamos la ruta. Elegimos el formato le damos al boton y listo. un saludo Citar Enlace al comentario Compartir en otros sitios web Mas opciones de compartir...
Castro Publicado 18 de Agosto de 2010 Compartir Publicado 18 de Agosto de 2010 me parece increible las curradas que os dais, pero por mas vueltas que le doy no entiendo la utilidad de la aplicacion Citar Enlace al comentario Compartir en otros sitios web Mas opciones de compartir...
mov Publicado 18 de Agosto de 2010 Compartir Publicado 18 de Agosto de 2010 Creo que usando la librería pdfCom.dll se podría no solo exportar a Word sino también sacarlo en PDF. Citar Enlace al comentario Compartir en otros sitios web Mas opciones de compartir...
FLA Publicado 18 de Agosto de 2010 Compartir Publicado 18 de Agosto de 2010 Buenas mov....y compañía....... Te llego la DLL...me dio problemas de salida por datos inseguros.....asi que no me quedaclaro que te llegara.... UN saludo Citar Enlace al comentario Compartir en otros sitios web Mas opciones de compartir...
mov Publicado 18 de Agosto de 2010 Compartir Publicado 18 de Agosto de 2010 Si FLA gracias, ya la tengo y hoy he estado haciendo pruebas. Por cierto que después de 3 años desde que me jubilé sin tocar VB y me he picado de nuevo, pronto tendré algo que enseñaros, estoy estudiando un visor rápido de datos Exif basado en tu DLL y con salida en PDF de forma que facilite la impresión. Si miras mi web hay un pequeño tutorial para novatos de VB donde en la sección "Artículos" hablo un poco del CommonDialog y de unas de sus características de trabajo. En programación siempre he defendido un dicho, "un error comentado deja de ser un error para convertirse en una característica" Gracias de nuevo monstruo. Citar Enlace al comentario Compartir en otros sitios web Mas opciones de compartir...
Comandante Publicado 19 de Agosto de 2010 Autor Compartir Publicado 19 de Agosto de 2010 Aqui estoy de vuelta tras unos dias larguiiiiisimos sin ordenador (me he tenido que comprar otro... )... despues de releer otra vez los comentarios, alguien decia que no le veia la utilidad, bueno imagino que habrá gente que le guste mantener hojas de contactos para tener un indice mas o menos ordenado de sus trabajos, y si ademas tienes en cada foto sus exif, pues de un vistazo identificas esa foto que te gusta y tienes toda la info de como la hiciste (igual para los pros no es necesario, pero para novatos como yo... jeje).. Volviendo al tema, ya tengo una primera versión operativa del programa, lo que no se es donde subirla para ponerla a disposicion vuestra Si alguien puede indicarme le agradecería, mientras tanto intentaré probarlo en otros equipos para ver los resultados. Como digo es una primera versión y no está probada en todas las condiciones, pero bueno, que funciona, doy fe. Evidentemente un requisito indispensable es tener instalado el office en el equipo . un saludo Citar Enlace al comentario Compartir en otros sitios web Mas opciones de compartir...
mov Publicado 19 de Agosto de 2010 Compartir Publicado 19 de Agosto de 2010 Yo tengo Hosting y está a tu disposición. envíamelo por correo Haz un ZIP y el qyue lo descargue que lo descomprima e instale. Te mando un MP con la dirección y luego cuando lo suba pongo un link aquí para descargarlo. Citar Enlace al comentario Compartir en otros sitios web Mas opciones de compartir...
jamarca Publicado 20 de Agosto de 2010 Compartir Publicado 20 de Agosto de 2010 Puedes subirlo a Megaupload (es el que yo uso, pero hay mas) y poner el enlace de descarga. Si no dispones de cuenta en Megaupload mandame un MP y te envio una direccion de correo para que me lo envies, lo subo y pongo el enlace. Saludos. Citar Enlace al comentario Compartir en otros sitios web Mas opciones de compartir...
Castro Publicado 22 de Agosto de 2010 Compartir Publicado 22 de Agosto de 2010 Aqui estoy de vuelta tras unos dias larguiiiiisimos sin ordenador (me he tenido que comprar otro... )... despues de releer otra vez los comentarios, alguien decia que no le veia la utilidad, bueno imagino que habrá gente que le guste mantener hojas de contactos para tener un indice mas o menos ordenado de sus trabajos, y si ademas tienes en cada foto sus exif, pues de un vistazo identificas esa foto que te gusta y tienes toda la info de como la hiciste (igual para los pros no es necesario, pero para novatos como yo... jeje).. Volviendo al tema, ya tengo una primera versión operativa del programa, lo que no se es donde subirla para ponerla a disposicion vuestra Si alguien puede indicarme le agradecería, mientras tanto intentaré probarlo en otros equipos para ver los resultados. Como digo es una primera versión y no está probada en todas las condiciones, pero bueno, que funciona, doy fe. Evidentemente un requisito indispensable es tener instalado el office en el equipo . un saludo hola comandante, yo decía que no entendía para qué sirve esto, y sigo sin comprenderlo. para ver una foto y sus exif uso ligthroom y listo, todas las fotos etiquetadas lo que me permite recuperarlas rápidamente por tema, lugar, etc, es cuestion solo de definir bien el arbol de etiquetas. Además, permite filtrar y ordenar por apertura, velocidad, objetivo, focal o lo que quiera. En fin, cuando esté colgada por aquí la aplicacion espero poder probarla, así quizá entienda el motivo de su diseño Saludos! Citar Enlace al comentario Compartir en otros sitios web Mas opciones de compartir...
Publicaciones recomendadas
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.