1

UPDATE1: The problem is confirmed because the camera is adding wrong EXIFTool Samsung APP5 tag. According to this website: http://exif.regex.info/exif.cgi, the image has unknown App5 segment.

enter image description here

If I delete the bytes: E5 00 02 FF, the image will show.

enter image description here

Also, I realized that if I remove EXIF Data using http://www.exifpurge.com/, the image will show. Looks like I will have to write Java code to remove EXIF Data completely upon inserting the image.

Any other suggestions will be appreciated.

UPDATE2: Answer found. Make sure to read the comments by @Mark in the answer below. It has a lot of valuable details.


Original Problem Description:

Check this image:

https://photos.app.goo.gl/fothcLY8MxRwBeED8 (uploaded to Google Photos, it it seems it is fixed in Google Photos)

https://drive.google.com/file/d/1cBjC1ipQqjOGmW4qAXokj5hsxK45QHqM/view?usp=sharing (this is the original version, if you try to insert this it will not show)

When I try to insert this image into Adobe LiveCycle Image Field, it will not show. If I check XML, I can see the Base64 data of this image is there but it is not showing in the form preview nor in Adobe Acrobat.

I tried to play around with this photo, and found out that if I compress it using Microsoft Photo Manager, it will show in the image field after I insert the compressed image file.

Any idea why this image is not showing in Adobe LiveCycle image field?

Tarek

tarekahf
  • 738
  • 1
  • 16
  • 42

1 Answers1

1

I am not sure what the constraints are for your answer, but you can see the APP5 marker with exiftool like this:

exiftool -v House.jpg 

Output

  ExifToolVersion = 11.11
  FileName = House.jpg
  Directory = /Users/mark/Desktop
  FileSize = 372002
  FileModifyDate = 1569258092
  FileAccessDate = 1569258821
  FileInodeChangeDate = 1569258092
  FilePermissions = 33188
  FileType = JPEG
  FileTypeExtension = JPG
  MIMEType = image/jpeg
JPEG APP0 (14 bytes):
  + [BinaryData directory, 9 bytes]
  | JFIFVersion = 1 1
  | ResolutionUnit = 1
  | XResolution = 72
  | YResolution = 72
  | ThumbnailWidth = 0
  | ThumbnailHeight = 0
JPEG APP1 (38248 bytes):
  ExifByteOrder = MM
  + [IFD0 directory with 13 entries]
  | 0)  ImageWidth = 4032
  | 1)  ImageHeight = 3024
  | 2)  Make = samsung
  | 3)  Model = SM-G950W
  | 4)  Orientation = 1
  | 5)  XResolution = 72 (72/1)
  | 6)  YResolution = 72 (72/1)
  | 7)  ResolutionUnit = 2
  | 8)  Software = G950WVLS6CSH1
  | 9)  ModifyDate = 2019:09:11 10:16:15
  | 10) YCbCrPositioning = 1
  | 11) ExifOffset (SubDirectory) -->
  | + [ExifIFD directory with 31 entries]
  | | 0)  ExposureTime = 0.004237288136 (1/236)
  | | 1)  FNumber = 1.7 (170/100)
  | | 2)  ExposureProgram = 2
  | | 3)  ISO = 50
  | | 4)  ExifVersion = 0220
  | | 5)  DateTimeOriginal = 2019:09:11 10:16:15
  | | 6)  CreateDate = 2019:09:11 10:16:15
  | | 7)  ComponentsConfiguration = 1 2 3 0
  | | 8)  ShutterSpeedValue = 7.882 (7882/1000)
  | | 9)  ApertureValue = 1.53 (153/100)
  | | 10) BrightnessValue = 5.23 (523/100)
  | | 11) ExposureCompensation = 0 (0/10)
  | | 12) MaxApertureValue = 1.53 (153/100)
  | | 13) MeteringMode = 2
  | | 14) LightSource = 0
  | | 15) Flash = 1
  | | 16) FocalLength = 4.25 (425/100)
  | | 17) MakerNoteUnknown (SubDirectory) -->
  | | + [MakerNotes directory with 7 entries]
  | | | 0)  Unknown_0x0001 = 0100
  | | | 1)  Unknown_0x0002 = 73728
  | | | 2)  Unknown_0x000c = 0
  | | | 3)  Unknown_0x0010 = undef (0/0)
  | | | 4)  Unknown_0x0040 = 0
  | | | 5)  Unknown_0x0050 = 1
  | | | 6)  Unknown_0x0100 = 0
  | | 18) UserComment = UNICODE.
  | | 19) FlashpixVersion = 0100
  | | 20) ExifImageWidth = 4032
  | | 21) ExifImageHeight = 3024
  | | 22) InteropOffset (SubDirectory) -->
  | | + [InteropIFD directory with 1 entries]
  | | | 0)  InteropVersion = 0100
  | | 23) SensingMethod = 2
  | | 24) SceneType = 1
  | | 25) ExposureMode = 0
  | | 26) WhiteBalance = 0
  | | 27) FocalLengthIn35mmFormat = 26
  | | 28) SceneCaptureType = 0
  | | 29) ImageUniqueID = F12QSJA00SM F12QSKB01SB
  | | 30) OffsetSchema = 0
  | 12) GPSInfo (SubDirectory) -->
  | + [GPS directory with 9 entries]
  | | 0)  GPSVersionID = 2 2 0 0
  | | 1)  GPSLatitudeRef = N
  | | 2)  GPSLatitude = 0 0 0 (0/1 0/1 0/10000)
  | | 3)  GPSLongitudeRef = E
  | | 4)  GPSLongitude = 0 0 0 (0/1 0/1 0/10000)
  | | 5)  GPSAltitudeRef = 0
  | | 6)  GPSAltitude = 0 (0/1000)
  | | 7)  GPSTimeStamp = 14 16 15 (14/1 16/1 15/1)
  | | 8)  GPSDateStamp = 2019:09:11
  + [IFD1 directory with 9 entries]
  | 0)  ImageWidth = 504
  | 1)  ImageHeight = 376
  | 2)  Compression = 6
  | 3)  Orientation = 1
  | 4)  XResolution = 72 (72/1)
  | 5)  YResolution = 72 (72/1)
  | 6)  ResolutionUnit = 2
  | 7)  ThumbnailOffset = 1212
  | 8)  ThumbnailLength = 37030
JPEG APP5 (0 bytes):                    <--- HERE'S THAT BAD BOY !!!!
JPEG APP2 (3158 bytes):
  ICC_Profile chunk 1 of 1
  + [ICC_Profile directory with 17 entries, 3144 bytes]
  | ProfileHeader (SubDirectory) -->
  | + [BinaryData directory, 128 bytes]
  | | ProfileCMMType = Lino
  | | ProfileVersion = 528
  | | ProfileClass = mntr
  | | ColorSpaceData = RGB 
  | | ProfileConnectionSpace = XYZ 
  | | ProfileDateTime = 1998 2 9 6 49 0
  | | ProfileFileSignature = acsp
  | | PrimaryPlatform = MSFT
  | | CMMFlags = 0
  | | DeviceManufacturer = IEC 
  | | DeviceModel = sRGB
  | | DeviceAttributes = 0 0
  | | RenderingIntent = 0
  | | ConnectionSpaceIlluminant = 0.9642 1 0.82491
  | | ProfileCreator = HP  
  | | ProfileID = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  | 0)  ProfileCopyright = Copyright (c) 1998 Hewlett-Packard Company
  | 1)  ProfileDescription = sRGB IEC61966-2.1
  | 2)  MediaWhitePoint = 0.95045 1 1.08905
  | 3)  MediaBlackPoint = 0 0 0
  | 4)  RedMatrixColumn = 0.43607 0.22249 0.01392
  | 5)  GreenMatrixColumn = 0.38515 0.71687 0.09708
  | 6)  BlueMatrixColumn = 0.14307 0.06061 0.7141
  | 7)  DeviceMfgDesc = IEC http://www.iec.ch
  | 8)  DeviceModelDesc = IEC 61966-2.1 Default RGB colour space - sRGB
  | 9)  ViewingCondDesc = Reference Viewing Condition in IEC61966-2.1
  | 10) ViewingConditions (SubDirectory) -->
  | + [BinaryData directory, 36 bytes]
  | | ViewingCondIlluminant = 19.6445 20.3718 16.8089
  | | ViewingCondSurround = 3.92889 4.07439 3.36179
  | | ViewingCondIlluminantType = 1
  | 11) Luminance = 76.03647 80 87.12462
  | 12) Measurement (SubDirectory) -->
  | + [BinaryData directory, 36 bytes]
  | | MeasurementObserver = 1
  | | MeasurementBacking = 0 0 0
  | | MeasurementGeometry = 0
  | | MeasurementFlare = 0.00999
  | | MeasurementIlluminant = 2
  | 13) Technology = CRT 
  | 14) RedTRC = curv.......#(-27;@EJOTY^chmrw|......................................%.[snip]
  | 15) GreenTRC = curv.......#(-27;@EJOTY^chmrw|......................................[snip]
  | 16) BlueTRC = curv.......#(-27;@EJOTY^chmrw|......................................%[snip]
JPEG DQT (65 bytes):
JPEG DQT (65 bytes):
JPEG SOF0 (15 bytes):
  ImageWidth = 1024
  ImageHeight = 768
  EncodingProcess = 0
  BitsPerSample = 8
  ColorComponents = 3
JPEG DHT (29 bytes):
JPEG DHT (179 bytes):
JPEG DHT (29 bytes):
JPEG DHT (179 bytes):
JPEG SOS

And you can remove it with exifTool like this:

exiftool -APP5:all= YourImage.jpg
Mark Setchell
  • 191,897
  • 31
  • 273
  • 432
  • Thanks a lot. Please bear with me... Can I use this command line tool `exiftool` from Java Program which is running in a web service context? Currently, there is Java code which is compressing the image. I want to remove EXIF data completely before compressing the image. What is the best approach? – tarekahf Sep 23 '19 at 19:12
  • I guess Java has some sort of `system()` or `subprocess()` command that lets you start external utilities, but I don't know... that's why I said I don't know your constraints. Hopefully someone else will be able to assist further. – Mark Setchell Sep 23 '19 at 19:21
  • Thanks @Mark! The command line tool did actually work. I did a test locally, and the fixed image did show in the Image Field. How I can remove all exif data? – tarekahf Sep 23 '19 at 19:27
  • 1
    You can use `exiftool -all= YourImage.jpg` to clean all EXIF Data from an image and `exiftool -all= DIRECTORY` to do all the files in a directory. – Mark Setchell Sep 23 '19 at 19:48
  • 1
    You can equally use ImageMagick with `magick input.jpg -strip output.jpg` and it has Java bindings too - apparently `IM4Java` and `JMagick` http://im4java.sourceforge.net – Mark Setchell Sep 23 '19 at 20:08
  • Thanks. I found this sample also: https://www.baeldung.com/run-shell-command-in-java. I think ImageMagick has everything I need, even compression. I was looking for tool to add text to image. I think this does that too. – tarekahf Sep 23 '19 at 20:27
  • 1
    I did an answer on adding text with **ImageMagick** here https://stackoverflow.com/a/55470441/2836621 – Mark Setchell Sep 23 '19 at 20:36
  • Wow! I don't think I can get better answer. This worked like a charm! – tarekahf Sep 23 '19 at 20:40