Camera image orientation on iOS

Hi,
Taking a picture using CamerUI on iOS (and on Android) may bring the image oriented in the wrong angle.
Reading the Exif on Android is fine and allows reorientation to the correct position, however this is not working on iOS.
Since I assume taking a picture using the camera is a core feature for many applications, I’d appreciate if someone who managed to solve it can post a solution here?
Thanks!

I think this is it:
// ExifReader.as
// Reads and obtains JPG EXIF data.
// Project site: http://devstage.blogspot.com/2011/02/extract-jpg-exif-metadata-in.html
// SAMPLE USAGE:
// var reader:ExifReader = new ExifReader();
// reader.addEventListener(Event.COMPLETE, function (e:Event):void{
//     trace(reader.getKeys());
//     trace(reader.getValue("DateTime"));
//     trace(reader.getThumbnailBitmapData().width +'x' + reader.getThumbnailBitmapData().height);
// reader.load(new URLRequest('myimage.jpg'), true);
package
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Loader;
    import flash.display.LoaderInfo;
    import flash.events.Event;
    import flash.events.EventDispatcher;
    import flash.events.ProgressEvent;
    import flash.net.URLRequest;
    import flash.net.URLStream;
    import flash.utils.ByteArray;
    public class ExifReader extends EventDispatcher
        private var m_loadThumbnail:Boolean = false;
        private var m_urlStream:URLStream = null;
        private var m_data:ByteArray = new ByteArray();
        private var m_exif:Object = new Object;
        private var m_exifKeys:Array = new Array();
        private var m_intel:Boolean=true;
        private var m_loc:uint=0; 
        private var m_thumbnailData:ByteArray = null;
        private var m_thumbnailBitmapData:BitmapData=null;
        private var DATASIZES:Object = new Object;
        private var TAGS:Object = new Object;
        public function load(urlReq:URLRequest, loadThumbnail:Boolean = false):void{
            m_loadThumbnail = loadThumbnail;  
            m_urlStream = new URLStream();
            m_urlStream.addEventListener( ProgressEvent.PROGRESS, dataHandler);
            m_urlStream.load(urlReq);
        public function getKeys():Array{
            return m_exifKeys;
        public function hasKey(key:String):Boolean{
            return m_exif[key] != undefined;
        public function getValue(key:String):Object{
            if(m_exif[key] == undefined) return null;
            return m_exif[key];
        public function getThumbnailBitmapData():BitmapData{
            return m_thumbnailBitmapData;
        public function ExifReader(){
            DATASIZES[1] = 1;
            DATASIZES[2] = 1;
            DATASIZES[3] = 2;
            DATASIZES[4] = 4;
            DATASIZES[5] = 8;
            DATASIZES[6] = 1;  
            DATASIZES[7] = 1;
            DATASIZES[8] = 2;
            DATASIZES[9] = 4;
            DATASIZES[10] = 8;
            DATASIZES[11] = 4;
            DATASIZES[12] = 8;
            TAGS[0x010e] = 'ImageDescription';
            TAGS[0x010f] = 'Make';
            TAGS[0X0110] = 'Model';
            TAGS[0x0112] = 'Orientation';
            TAGS[0x011a] = 'XResolution';
            TAGS[0x011b] = 'YResolution';
            TAGS[0x0128] = 'ResolutionUnit';
            TAGS[0x0131] = 'Software';
            TAGS[0x0132] = 'DateTime';
            TAGS[0x013e] = 'WhitePoint';
            TAGS[0x013f] = 'PrimaryChromaticities';
            TAGS[0x0221] = 'YCbCrCoefficients';
            TAGS[0x0213] = 'YCbCrPositioning';
            TAGS[0x0214] = 'ReferenceBlackWhite';
            TAGS[0x8298] = 'Copyright';
            TAGS[0x829a] = 'ExposureTime';
            TAGS[0x829d] = 'FNumber';
            TAGS[0x8822] = 'ExposureProgram';
            TAGS[0x8827] = 'IsoSpeedRatings';
            TAGS[0x9000] = 'ExifVersion';
            TAGS[0x9003] = 'DateTimeOriginal';
            TAGS[0x9004] = 'DateTimeDigitized';
            TAGS[0x9101] = 'ComponentsConfiguration';
            TAGS[0x9102] = 'CompressedBitsPerPixel';
            TAGS[0x9201] = 'ShutterSpeedValue';
            TAGS[0x9202] = 'ApertureValue';
            TAGS[0x9203] = 'BrightnessValue';
            TAGS[0x9204] = 'ExposureBiasValue';
            TAGS[0x9205] = 'MaxApertureValue';
            TAGS[0x9206] = 'SubjectDistance';
            TAGS[0x9207] = 'MeteringMode';
            TAGS[0x9208] = 'LightSource';
            TAGS[0x9209] = 'Flash';
            TAGS[0x920a] = 'FocalLength';
            TAGS[0x927c] = 'MakerNote';
            TAGS[0x9286] = 'UserComment';
            TAGS[0x9290] = 'SubsecTime';
            TAGS[0x9291] = 'SubsecTimeOriginal';
            TAGS[0x9292] = 'SubsecTimeDigitized';
            TAGS[0xa000] = 'FlashPixVersion';
            TAGS[0xa001] = 'ColorSpace';
            TAGS[0xa002] = 'ExifImageWidth';
            TAGS[0xa003] = 'ExifImageHeight';
            TAGS[0xa004] = 'RelatedSoundFile';
            TAGS[0xa005] = 'ExifInteroperabilityOffset';
            TAGS[0xa20e] = 'FocalPlaneXResolution';
            TAGS[0xa20f] = 'FocalPlaneYResolution';
            TAGS[0xa210] = 'FocalPlaneResolutionUnit';
            TAGS[0xa215] = 'ExposureIndex';
            TAGS[0xa217] = 'SensingMethod';
            TAGS[0xa300] = 'FileSource';
            TAGS[0xa301] = 'SceneType';
            TAGS[0xa302] = 'CFAPattern';
            //... add more if you like.
            //See http://park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html
        private function dataHandler(e:ProgressEvent):void{
            //EXIF data in top 64kb of data
            if(m_urlStream.bytesAvailable >= 64*1024){
                m_urlStream.readBytes(m_data, 0, m_urlStream.bytesAvailable);
                m_urlStream.close();
                processData();
        private function processData():void{
            var iter:int=0;
            //confirm JPG type
            if(!(m_data.readUnsignedByte()==0xff && m_data.readUnsignedByte()==0xd8))
                return stop();
            //Locate APP1 MARKER
            var ff:uint=0;
            var marker:uint=0;
            for(iter=0;iter<5;++iter){ //cap iterations
                ff = m_data.readUnsignedByte();
                marker = m_data.readUnsignedByte();
                var size:uint = (m_data.readUnsignedByte()<<8) + m_data.readUnsignedByte();
                if(marker == 0x00e1) break;
                else{
                    for(var x:int=0;x<size-2;++x) m_data.readUnsignedByte();
            //Confirm APP1 MARKER
            if(!(ff == 0x00ff && marker==0x00e1)) return stop();
            //Confirm EXIF header
            var i:uint;
            var exifHeader:Array = [0x45,0x78,0x69,0x66,0x0,0x0];
            for(i=0; i<6;i++) {if(exifHeader[i] != m_data.readByte()) return stop();}
            //Read past TIFF header
            m_intel = (m_data.readByte()!=0x4d);
            m_data.readByte(); //redundant
            for(i=0; i<6;i++) {m_data.readByte();} //read rest of TIFF header
            //Read IFD data
            m_loc = 8;
            readIFD(0);
            //Read thumbnail
            if(m_thumbnailData){
                var loader:Loader = new Loader();
                loader.contentLoaderInfo.addEventListener(Event.COMPLETE, thumbnailLoaded);
                loader.loadBytes(m_thumbnailData);
            else stop();
        //EXIF data is composed of 'IFD' fields.  You have IFD0, which is the main picture data.
        //IFD1 contains thumbnail data.  There are also sub-IFDs inside IFDs, notably inside IFD0.
        //The sub-IFDs will contain a lot of additional EXIF metadata.
        //readIFD(int) will help read all of these such fields.
        private function readIFD(ifd:int):void{
            var iter:int=0;
            var jumps:Array = new Array();
            var subexifJump:uint=0;
            var thumbnailAddress:uint=0;
            var thumbnailSize:int=0;
            // Read number of entries
            var numEntries:uint;
            if(m_intel) numEntries = m_data.readUnsignedByte() + (m_data.readUnsignedByte()<<8);
            else numEntries = (m_data.readUnsignedByte()<<8) + (m_data.readUnsignedByte());
            if(numEntries>100) numEntries=100; //cap entries
            m_loc+=2;
            for(iter=0; iter<numEntries;++iter){
                //Read tag
                var tag:uint;
                if(m_intel) tag = (m_data.readUnsignedByte()) + (m_data.readUnsignedByte()<<8);
                else tag = (m_data.readUnsignedByte()<<8) + (m_data.readUnsignedByte());
                //read type
                var type:uint;
                if(m_intel) type = (m_data.readUnsignedByte()+(m_data.readUnsignedByte()<<8));
                else type = (m_data.readUnsignedByte()<<8)+(m_data.readUnsignedByte()<<0);
                //Read # of components
                var comp:uint;
                if(m_intel) comp = (m_data.readUnsignedByte()+(m_data.readUnsignedByte()<<8) + (m_data.readUnsignedByte()<<16) + (m_data.readUnsignedByte()<<24));
                else comp = (m_data.readUnsignedByte()<<24)+(m_data.readUnsignedByte()<<16) + (m_data.readUnsignedByte()<<8) + (m_data.readUnsignedByte()<<0);
                //Read data
                var data:uint;
                if(m_intel) data= m_data.readUnsignedByte()+(m_data.readUnsignedByte()<<8) + (m_data.readUnsignedByte()<<16) + (m_data.readUnsignedByte()<<24);
                else data = (m_data.readUnsignedByte()<<24)+(m_data.readUnsignedByte()<<16) + (m_data.readUnsignedByte()<<8) + (m_data.readUnsignedByte()<<0);
                m_loc+=12;
                if(tag==0x0201) thumbnailAddress = data; //thumbnail address
                if(tag==0x0202) thumbnailSize = data;  //thumbnail size (in bytes)
                if(TAGS[tag] != undefined){
                    //Determine data size
                    if(DATASIZES[type] * comp <= 4){
                        //data is contained within field
                        m_exif[TAGS[tag]] = data;
                        m_exifKeys.push(TAGS[tag]);
                    else{
                        //data is at an offset
                        var jumpT:Object = new Object();
                        jumpT.name = TAGS[tag];
                        jumpT.address=data;
                        jumpT.components = comp;
                        jumpT.type = type;
                        jumps.push(jumpT);
                if(tag==0x8769){ // subexif tag
                    subexifJump = data;
            var nextIFD:uint;
            if(m_intel) {
                nextIFD= m_data.readUnsignedByte()+(m_data.readUnsignedByte()<<8) + (m_data.readUnsignedByte()<<16) + (m_data.readUnsignedByte()<<24);
            else {
                nextIFD = (m_data.readUnsignedByte()<<24)+(m_data.readUnsignedByte()<<16) + (m_data.readUnsignedByte()<<8) + (m_data.readUnsignedByte()<<0);
            m_loc+=4;
            //commenting this out, as suggested in the comments.
            //if(ifd==0) jumps = new Array();
            for each(var jumpTarget:Object in jumps){
                var jumpData:Object = null;
                for(;m_loc<jumpTarget.address;++m_loc)m_data.readByte();
                if(jumpTarget.type==5){
                    //unsigned rational
                    var numerator:uint = m_data.readInt();
                    var denominator:uint = m_data.readUnsignedInt();
                    m_loc+=8;
                    jumpData = numerator / denominator;
                if(jumpTarget.type==2){
                    //string
                    var field:String='';
                    for(var compGather:int=0;compGather<jumpTarget.components;++compGather){
                        field += String.fromCharCode(m_data.readByte());
                        ++m_loc;
                    if(jumpTarget.name=='DateTime' ||
                        jumpTarget.name=='DateTimeOriginal' ||
                        jumpTarget.name=='DateTimeDigitized'){
                        var array:Array = field.split(/[: ]/);
                        if(parseInt(array[0]) > 1990){
                            jumpData = new Date(parseInt(array[0]), parseInt(array[1])-1,
                                parseInt(array[2]), parseInt(array[3]),
                                parseInt(array[4]), parseInt(array[5]));
                    else jumpData = field;
                m_exif[jumpTarget.name] = jumpData;
                m_exifKeys.push(jumpTarget.name);
            if(ifd==0 && subexifJump){
                //jump to subexif area to obtain meta information
                for(;m_loc<data;++m_loc) m_data.readByte();
                readIFD(ifd);
            if(ifd==1 && thumbnailAddress && m_loadThumbnail){
                //jump to obtain thumbnail
                for(;m_loc<thumbnailAddress;++m_loc) m_data.readByte();
                m_thumbnailData = new ByteArray();
                m_data.readBytes(m_thumbnailData, 0, thumbnailSize);
                return;
            // End-of-IFD
            // read the next IFD
            if(nextIFD){
                for(;m_loc<nextIFD;++m_loc) m_data.readUnsignedByte();               
            if(ifd==0 && nextIFD)
                readIFD(1);
        private function thumbnailLoaded(e:Event):void{
            m_thumbnailData.clear();
            var loader:LoaderInfo = e.target as LoaderInfo;
            var bitmap:Bitmap = loader.content as Bitmap;
            if(bitmap != null){
                m_thumbnailBitmapData = bitmap.bitmapData;
            stop();
        // Releases m_data and dispatches COMPLETE signal.
        private function stop():void{
            m_data=null;
            dispatchEvent(new Event(Event.COMPLETE));
            return;

Similar Messages

  • Image orientation on iOS

    Hi Everyone,
    Reading the EXIF is not working in iOS. I managed to fixed using same classes(jp.shichiseki.exif.*) in Android.
    Here is my source code,
    import jp.shichiseki.exif.*;
    import flash.net.URLRequest;
    import flash.text.TextFormat;
    var cameraRoll:CameraRoll = new CameraRoll();
    var imagePromise:MediaPromise;
    var dataSource:IDataInput;
    var loader:ExifLoader = new ExifLoader();
    loader.addEventListener(Event.COMPLETE, onComplete);
    if(CameraRoll.supportsBrowseForImage)
              cameraRoll.addEventListener(MediaEvent.SELECT, imageSelected);
              cameraRoll.addEventListener(Event.CANCEL, browseCanceled);
              //cameraRoll.addEventListener( ErrorEvent.ERROR, mediaError );
              cameraRoll.browseForImage();
    else
    function browseCanceled(e:Event):void
              trace("Cancelled")
    function imageSelected(e:MediaEvent):void
              trace(" --- Image Selected  --- \n");
              imagePromise = e.data;
              trace(imagePromise.isAsync + " \n");
              dataSource = imagePromise.open();
              if(imagePromise.isAsync)
                        var eventSource:IEventDispatcher = dataSource as IEventDispatcher;           
                        eventSource.addEventListener( Event.COMPLETE, onMediaLoaded );
              }else{
                        imagePromise.open();
                        // get data
                        loader.load(new URLRequest(imagePromise.file.url));
                        // load with Loader
    function onComplete(e:Event):void {
      if (loader.exif.ifds.primary)
        displayIFD(loader.exif.ifds.primary);
      if (loader.exif.ifds.exif)
        displayIFD(loader.exif.ifds.exif);
      if (loader.exif.ifds.gps)
        displayIFD(loader.exif.ifds.gps);
      if (loader.exif.ifds.interoperability)
        displayIFD(loader.exif.ifds.interoperability);
      if (loader.exif.ifds.thumbnail)
        displayIFD(loader.exif.ifds.thumbnail);
              //addChildAt(loader.content, 0)
    function displayIFD(ifd:IFD):void {
      trace(" --- " + ifd.level + " ---\n" );
      for (var entry:String in ifd) {
        trace(entry + ": " + ifd[entry] + " \n");
    function onMediaLoaded( event:Event ):void
              event.currentTarget.removeEventListener( Event.COMPLETE, onMediaLoaded );
              var imageBytes:ByteArray = new ByteArray();
              dataSource.readBytes( imageBytes );
         //imageBytes.position = 0;
         //var string:String = imageBytes.readUTFBytes(300);
              trace("imgbytes---> \n"+imageBytes + "\n");
              var exif:ExifInfo = new ExifInfo(imageBytes);
              trace("\nifds : " + exif.ifds + "\n");
    Did i miss anything?
    Thanks
    Regards
    Balasubramaniyan.S

    Hi Everyone,
    Reading the EXIF is not working in iOS. I managed to fixed using same classes(jp.shichiseki.exif.*) in Android.
    Here is my source code,
    import jp.shichiseki.exif.*;
    import flash.net.URLRequest;
    import flash.text.TextFormat;
    var cameraRoll:CameraRoll = new CameraRoll();
    var imagePromise:MediaPromise;
    var dataSource:IDataInput;
    var loader:ExifLoader = new ExifLoader();
    loader.addEventListener(Event.COMPLETE, onComplete);
    if(CameraRoll.supportsBrowseForImage)
              cameraRoll.addEventListener(MediaEvent.SELECT, imageSelected);
              cameraRoll.addEventListener(Event.CANCEL, browseCanceled);
              //cameraRoll.addEventListener( ErrorEvent.ERROR, mediaError );
              cameraRoll.browseForImage();
    else
    function browseCanceled(e:Event):void
              trace("Cancelled")
    function imageSelected(e:MediaEvent):void
              trace(" --- Image Selected  --- \n");
              imagePromise = e.data;
              trace(imagePromise.isAsync + " \n");
              dataSource = imagePromise.open();
              if(imagePromise.isAsync)
                        var eventSource:IEventDispatcher = dataSource as IEventDispatcher;           
                        eventSource.addEventListener( Event.COMPLETE, onMediaLoaded );
              }else{
                        imagePromise.open();
                        // get data
                        loader.load(new URLRequest(imagePromise.file.url));
                        // load with Loader
    function onComplete(e:Event):void {
      if (loader.exif.ifds.primary)
        displayIFD(loader.exif.ifds.primary);
      if (loader.exif.ifds.exif)
        displayIFD(loader.exif.ifds.exif);
      if (loader.exif.ifds.gps)
        displayIFD(loader.exif.ifds.gps);
      if (loader.exif.ifds.interoperability)
        displayIFD(loader.exif.ifds.interoperability);
      if (loader.exif.ifds.thumbnail)
        displayIFD(loader.exif.ifds.thumbnail);
              //addChildAt(loader.content, 0)
    function displayIFD(ifd:IFD):void {
      trace(" --- " + ifd.level + " ---\n" );
      for (var entry:String in ifd) {
        trace(entry + ": " + ifd[entry] + " \n");
    function onMediaLoaded( event:Event ):void
              event.currentTarget.removeEventListener( Event.COMPLETE, onMediaLoaded );
              var imageBytes:ByteArray = new ByteArray();
              dataSource.readBytes( imageBytes );
         //imageBytes.position = 0;
         //var string:String = imageBytes.readUTFBytes(300);
              trace("imgbytes---> \n"+imageBytes + "\n");
              var exif:ExifInfo = new ExifInfo(imageBytes);
              trace("\nifds : " + exif.ifds + "\n");
    Did i miss anything?
    Thanks
    Regards
    Balasubramaniyan.S

  • CameraRoll & CameraUI image orientation

    Hi,
    I am trying to read the Orientation tag in EXIF image data grabbed with CameraRoll or CameraRollUI using AIR 3.6 on iOS 6.1
    To achieve this, I use this library coded by Christian Cantrell :
    http://blogs.adobe.com/cantrell/archives/2011/10/parsing-exif-data-from-images-on-mobile-d evices.html
    Unfortunantly, it raises an error when I try to parse the Byterray containing the EXIF data :
    var exifInfo:ExifInfo = new ExifInfo( eb );
    TypeError: Error #1034: Type Coercion failed: cannot convert "<tags level="0th IFD TIFF Tags">
      <tag tag_name="Image width" field_name="ImageWidth" id="0x0100" compressed="J">
        <uncompressed chunky="M" planar="M" ycc="M" />
      ... INSERT BIG CHUNK OF XML HERE ...
    </tags>" to XML.
              at jp.shichiseki.exif::ExifInfo/readIFDs()[/Users/***/Google Drive/AS3/libs/jp/shichiseki/exif/ExifInfo.as:100]
              at jp.shichiseki.exif::ExifInfo()[/Users/***/Google Drive/AS3/libs/jp/shichiseki/exif/ExifInfo.as:63]
    It seems that Air can't cast the data into XML, but it's kind of crazy because I am able to see all the data in the error text (I purposedly truncated it here for not flooding this post) and it's XML valid. I had a look into the ExifInfo class, but it's hard to see where the error comes from.
    I really need to get access to these data, since it's the only way to determine image orientation in iOS. Or is there any native extention thaht I could use to achieve this ?
    Any advice will be welcome as I am stuck on a project for a client because of this.
    Thank you all !

    Hello Frog,
    a very (very) dirty solution could be :
    - use a try...catch...finally block to prevent the error raising
    - in the catch block, parse the error message to get your orientation value (String method, regexp...)
    [code]
    var myExifData:XML;
    try {
         // try to get the exif data
         var exifInfo:ExifInfo = new ExifInfo( eb );
    } catch(err:Error) {
         // fails, but maybe I can get the exif info in the error message...
         myExifData = parseExifError(err.message); // parse the error message to get your orientation info...
    } finally {
        do what I have to do with my image : rotate, scale....
    [/code]
    BTW, PhoneGap is perfectly able to get orientation of an image from the camera roll. So there IS a solution somewhere.
    Maybe you could try to make a native extension ? It's not so hard for little things like that...
    My 2 cents
    Nicolas

  • Indicated Image Orientation is Incorrect

    Hi all:
    Aperture 2.1.1 has begun to incorrectly tag images in the portrait orientation as “Landscape,” even though the images were correctly oriented as portrait during import and when viewing them in the Browser or Full screen mode. Doesn’t matter which camera (Nikon D80, Canon Powershot SD600 or Panasonic DMC-TZ1) I import from.
    Additionally, when viewing the incorrectly tagged images in the Finder window, set to column view, portrait-oriented images correctly oriented in Aperture are incorrectly oriented as landscape in the Finder window. They also open as landscape-oriented images in Preview. If I correctly rotate the image in Preview, then save the file, the Finder correctly displays the image, but the thumbnail in Aperture becomes corrupted: The image orientation in the Browser window remains as portrait, but the image preview has rotated 90 degrees.
    Can’t tell if this occurred since upgrading to Aperture 2.1.1 or Mac OS 10.5.5. Any ideas?

    Thanks for the tip. I did exactly what you suggested and ended up with over 2000 extra versions (sometimes up to six) of my files, some with strangely cropped previews, and files long since deleted. All these extra versions did not include any metadata I added (i.e., keywords, description, byline, city, state, etc.). In some cases the file name reverted back to the original one assigned by the camera(s).
    Meanwhile, rebuilding the database did not solve the incorrect orientation tag issue. All my images are referenced masters. No masters in my database are stored in the Aperture library.
    Thanks for any advice out there.

  • Image orientation upon importing?

    HI, I am using Photoshop elements 8. I was wondering if anybody knows of an option which controls image orientation during photo import? My situation; I have a large catalogue of photos and I have a canon 40d which I use for my serious photo work and I use an Olympus 6000 tough for play. Just recently when I went to upload my images off of the Olympus point and shoot all of my portrait image when imported are laying on their side or are presented in a landscape style. Now I have to go through manually rotate each image or select groups of images which is very time consuming. I don’t know what happen, elements use to rotate the images to their correct orientation during import. Does anybody know how to solve this?
    Thanks,
    jt

    The photo you posted has the Orientation field in the EXIF metadata set to Horizontal (landscape):
    Image Width                : 3648
    Image Height               : 2736
    Make                       : OLYMPUS IMAGING CORP.
    Camera Model Name          : uT6000,ST6000
    Orientation                : Horizontal (normal)
    So that's why PSE isn't rotating it.  Perhaps there's a setting in your camera you need to enable to have it record the Orientation properly, or perhaps the orientation sensor broke?
    I used Exiftool to examine the EXIF metadata in the photo -- it is the most reliable way of examining all the photo metadata without the "helpful" interpretation and filtering that most programs (like PSE) provide.

  • [solved] Image orientation issue

    Hello,
    I have a problem with image orientation.
    I am using Arch64 and KDE 4.4.5 from Arch.
    When I look at my pictures in digikam (1.3.0) or gwenview, portrait pictures are displayed fine. If I send them with thunderbird, portrait images are displayed with landscape orientation.
    The only workaround I found is to rotate twice the image with digikam (once on the right and once on the left to set it back to previous orientation).
    I have noticed that EXIF information change...does anyone have the same issue and knows what is the cause of it ?
    before, orientation is "droit, haut" = "right, top"
    after, orientation is "haut, gauche" = "top, left" and width and heigth size is set...
    regards
    Last edited by supercow (2010-07-08 17:20:11)

    Digital cameras create images that aren't rotated as such -- as plain images they're always in landscape format. If your camera has an orientation sensor, it will merely hint at the intended orientation by setting the exif orientation value in the jpeg file (instead of really rotating the image and creating a jpeg with a portrait format).
    Not all programs interpret all exif data. Programs that don't interpret the exif orientation (as thunderbird seems to do it) will display the image as it is (always in landscape), while others (like digikam) use the exif data to decide on how to rotate the image for display. So digikam is just smart enough to show the image in it's "logical" portrait format while it's "physically" remains in landscape format.
    To make a real portrait jpeg, you have to really rotate it and adjust the exif orientation accordingly, which is what effectively happens if you use digikam in the way you describe it. So that's not a workaround, but required to make sure that all programs display the images in the desired format, and not just those that are smart enough to honor the exif orientation.
    See the jpegexiforient and jpegautotran programs for an explanation and an alternative way to rotate images based on their exif orientation value.
    Last edited by hbekel (2010-07-07 21:55:00)

  • Image Orientation/Rotation Problem in Lightroom 3.2 Final

    This is a continuation of my previous post regarding this same problem in 3.2RC. It's still happening in the Final version of Lightroom 3.2.
    THE PROBLEM
    Image orientation is not working properly in Lightroom 3.2. This affects newly imported images and images that were already in my Lightroom database -  and which have been in the database since Version 1.
    Here's a screen capture showing the strange displays I'm seeing in  Lightroom's grid mode:
    Notice the odd angle of the image. When I use the Rotate Photo Left tool, the display looks like this sometimes. After a second or so, it will snap to either a vertical or horizontal orientation by itself but rarely gives me the 90-degree rotation this tool should give. The image may flip 90-degrees or 180-degrees, there's no way to tell.
    When I view the image in Loupe view or on my second monitor, the orientation shown in Grid view does not match that displayed in Loupe Vew. For this particular image, Grid view currently shows it as correctly orientated as a horizontal while Loupe view shows it rotated 90-degrees to the right. Shouldn't they match?
    BACKGROUND
    I never had a problem with image orientation in any preveious version of Lightroom prior to Lightroom 3.2RC and 3.2 Final. So, it seems to be a bug in 3.2. I'm still using the same computer and video card I used with previous versions. My operating system is Windows 7 Home Premium. Both Windows and Lightroom are 64-bit.
    HELP!
    Is anyone else having this problem? How can I solve it?
    Alan
    PhtooCitizen.com

    The size of the catalogue is almost certainly not at play here.
    FWIW, I recall seeing something like this once a long time ago on a Mac, possibly with Lr 3 beta, or Lr 2.x.  It went away with a restart. It almost looks like a threading issue, where a thread is suspended or preempted and then is lost or disconnected from the main UI thread.
    I recall you can just rotate the image again and it will right itself.
    Adobe fist-line support seem to want to use the number of images in the catalogue as some sort of catch-all.  The problem with this is that most of us can demonstrate that there is little correspondence with the number of image IDs in the database and many reported UI artefacts.
    I'd keep raising this with them, and suggesting that the size of the catalogue is probably not at play here. As a tactic, you can ask what the maximum size of a catalogue should be, and if it is raw images or the number of changes to the images and virtual copies that is the problem, and if this can be verified by second- or third-line support.

  • Error in saving modified image to Library (ios 4.3)

    Reference thread:
    https://discussions.apple.com/message/7211117?messageID=7211117
    I still have an error in my ios (4.3) code that "cannot type cast @selector expression" when I try to do the following:
    // Save image
    UIImageWriteToSavedPhotosAlbum(imageCopy, self, (SEL)@selector(image:didFinishSavingWithError:contextInfo:), nil);
    If I have the following I get an error message, I'm looking for a fix, so I can save the modified image to my ios device library.
    I also saw this as an option ( http://iphoneincubator.com/blog/windows-views/image-processing-tricks ):
    UIImageWriteToSavedPhotosAlbum(image, self, @selector(imageSavedToPhotosAlbum: didFinishSavingWithError: contextInfo:), context);
    But if I change image: to imageSaveToPhotosAlbum then it complains that context was not defined.
    I could use some help!!  Thank you.

    Seen this thread?
    https://devforums.apple.com/message/465549#465549

  • Windows XP can no longer "see" my iPhone as a camera/imaging device

    can't sync photos from iPhone to computer; Windows XP doesn't even see it as a camera or imaging device. Weird, since iTunes is able to synch music/contacts.
    No matter how I check, Windows XP can't find the device:
    control panel --> scanners and cameras - nothing!
    My Computer --> devices with removable storage - no iPhone
    Computer Management--> Device Manager - no iPhone or scanner/camera

    UPDATE - I think I've resolved my problem and that it is related to having my iPhone "passcode locked".
    1. I connected it and unlocked the iPhone, synced music, but had the problems I noted in my original discussion post
    2. I disconnected the iPhone, closed iTunes, reopened iTunes and reconnected the iPhone (making sure it was NOT passcode locked before connecting it) -- everything works fine.
    3. now I can get back to my original issue, was to figure out how to get only my NEW iPhone captured photos to synch, or at least have them date ordered. But that's a subject for another post.
    BOTTOM LINE - passcode lock may be the key for those who are having problems with their PC not able to see the iPhone as a camera/imaging device

  • Satellite S70-A-11H web camera image quality is not good

    Hi,
    Running windows 8.1 which came with the laptop.
    New out of the box.
    As per title.
    I find the image quality of the camera image to be very grainy, poor color etc.
    When I start the web camera using the search bar on the right, it starts using the Microsoft application, when you scroll down to settings all that is available under settings/options is Photo aspect ratio, Grid lines, Location info.
    I have been in touch with Toshiba Tech support who advised to do a Laptop refresh, which I did.
    This made no difference.
    After which they asked me to find the Toshiba web camera application on the laptop, this should have been in the Program Files folder in the Toshiba folder.
    This application does not exist on my laptop.
    The tech checked the same model laptop that he had available, which I was told when he selected the web camera, it opened using the Toshiba Web camera application, not Microsoft.
    I have looked at other Toshiba laptops with web cameras, and found the image quality to be better. Unable to get to settings as these laptops were on display and in demo mode, hence locked down to some extent.
    I can't believe that a web camera in this day and age for this value of laptop to have such poor image quality. My digital camera from 10year ago has better image quality.
    I have checked through the laptop, and I do not have this application installed.
    I have checked for updated drivers and software for my laptop, and cannot find this application to be applicable for my laptop. Drivers etc appear to be up to date.
    I would like to know, do other users of this S series have any issue of camera image quality.
    When the camera is selected what application is being used, Toshiba or Microsoft.
    Is Toshiba web camera application applicable to Windows 8.1, as I cannot see it listed for 8.1
    Does this sound like a hardware fault or a application/software issue.
    Any direction or help on this matter would be appreciated, as I am getting to the point of returning this laptop for a refund.
    Thanks in advance.
    D.
    Yes, I have tried using the FORCE!

    > The tech checked the same model laptop that he had available, which I was told when he selected the web camera, it opened using the Toshiba Web camera application, not Microsoft.
    The Toshiba webcam application is available for Win 7 system but the Win 8 and Windows 8.1 system use the own Microsoft webcam application.
    > I have looked at other Toshiba laptops with web cameras, and found the image quality to be better.
    Different Toshiba notebooks are equipped with different webcams.
    Satellite S70-A-11H was equipped with a *0.92 mega pixel webcam*
    A Satellite A660 for example was equipped with an _1.3M mega pixel webcam_
    So there is a difference in webcam resolution

  • Third Party 2 in 1 Camera Connection Kit and iOS 4.2

    Has anyone tried the third party 2 in 1 Camera Connection Kit with iOS 4.2? This is the connector that has both the SD slot as well as the USB slot in one unit, rather than the two separate units on the Apple branded one. The third party one is cheaper and 1 less thing to carry around or potentially lose.
    Thanks!
    Matt

    the third party 2 in 1 Camera Connection Kit
    Is this really the actual name of it?

  • Some email images do not show while using the icloud web app.  I can see the images on my IOS devices and in gmail but I only see a small gray box in the icloud web mail app.  Load HTML images is checked in preferences.

    Some email images do not show while using the icloud web app.  I can see the images on my IOS devices and in gmail but I only see a small gray box in the icloud web mail app.  Load HTML images is checked in preferences.  Is there a solution to this issue?

    I've seen the opposite issue.  My wife recieved an email with jpg attachments.  She couldn't see or print them on her iPhone 4S but they showed up fine in iCloud or in the mail app.  I had her forward the email to herself and then they showed up.  I assume there is an issue with how Apple is processing the attachments and resending causes them to get reformatted in a way that makes them easier to handle.
    So yeah.  Seems like some bugs.  Hope Apple fixes them soon.

  • Two Simultaneous USB Camera Image Acquisition and Saving

    Hello everyone,
    Recently my friends and I have begun a project which requires the simultaneous acquisition of images from two independent USB cameras. Throughout our project research we have encountered many difficulties. The major problem appears to be how to successfully interface two USB cameras and properly save the image to a median for further processing down the road.
    Our first attempted at this was with the USB IMAQ drivers. Unfortunately, to our surprise, it does not support two independent and simultaneous camera acquisitions. To combat this problem we implemented a crude loop of closing a camera reference, then opening the other, acquiring an image, then closing, etc... This did provide us with functionality but was very inefficient, resulting insufficient acquisition speeds.
    Afterwards we began looking at other ways of capturing and writing the image, which are listed below.
    Various Acquisition Interfaces / Strategies
    USB IMAQ Driver - USB interfacing kit available for public download, (not officially supported by NI) zone.ni.com/devzone/cda/epd/p/id/5030
    Status - Abandoned because of the lack of dual web camera support
    Avicap32.dll - Windows 32 DLL responsible for all web camera communication, and other media devices.
    Status - Currently acquired two streams of video on the front panel but with no way of saving the images
    Directx - The core Windows technology that drives high-speed multimedia on a PC.
    Status - Currently researching.
    .NET - Microsoft .NET framework, possibly a valid interface to a video stream.
    Status - No development until further progress.
    We are still currently developing the Avicap32.dll code but the major bottleneck is the learning curve on the property nodes, library calling nodes, .NET and other references. So far it’s been a tedious effort of trying to understand example code and piece them together. As a former programmer of C I know this is not the proper way of writing code web I can’t seem to grasp how these functions work. (Property nodes, library calling nodes, .NET and other references). Learning this may allow us the knowledge to code a proper system. Does anyone know any good tutorials or learning material for such functions? So far my research has come up empty handed.
    We are currently working with these interfaces and other reference examples on the NI site. Unfortunately we cannot seem to properly integrate the code for our system. Does anyone know if this setup is even possible? Also, if anyone has any experience with similar systems and can offer advice, code snippets, or any other assistance it would be greatly appreciated.
    Our current projects will be posted below if you have any suggestions. (More will be added when I get to my desktop tomorrow)
    Two Camera Avicap32.dll - Currently stuck on how to save the image, various tweaks have gotten us stuck at this point ( will have another Avicap32.dll implementation posted tomorrow)
    USB Capture Example - This USB capture VI was an example that immediate had problems. We used it as a baseline for crude open-close camera image grabbing system. (Will also be posted tomorrow)
    Thanks for any help, it's much appreciated.
    Taylor S. Amarel
    Thanks,
    Taylor S. Amarel
    Learning is living.
    Co-Founder and CEO of http://3dprintingmodel.com/
    "If we did all the things we are capable of, we would literally astound ourselves."
    -Thomas Edison
    Attachments:
    Two Camera Avicap32.dll.zip ‏84 KB
    USB Capture Example.zip ‏17 KB

    Thanks for the information but that's not exactly what I'm looking for. I've been to that URL and read the information before. I don't mean to disparage you help but I'm looking for ways that I can successfully implement a functional system, not information on an unfunctional method. Maybe I was unclear before, I'm looking for any advice, knowledge or help on how to make this system properly work.
    Thanks, have a great day.
    Taylor S. Amarel 
    Learning is living.
    Co-Founder and CEO of http://3dprintingmodel.com/
    "If we did all the things we are capable of, we would literally astound ourselves."
    -Thomas Edison

  • My camera ***** after upgrating to ios 7.0.2. It turns black with the back camera.does anyone experienced this?

    My camera ***** after upgrating to ios 7.0.2. It turns black with the back camera.does anyone experienced this?

    Hi, chen zhuang. 
    Thank you for the question.  This article will help your troubleshoot the camera issue with your iPhone.  See the section labeled Camera is not functioning.
    iPhone: Hardware troubleshooting
    http://support.apple.com/kb/TS2802
    If none of the solutions in the article resolve the issue, see the section labeled Issue not resolved.
    Cheers,
    Jason H

  • Can you lock the background image orientation?

    Hello all
    Is there a way to lock the image orientation? When I turn the iPad, I want the apps to rotate, but I want the background image to stay portrait.
    If not, is there someplace i can suggest the feature?
    Thanks!

    No. It will orient along with your view. You can post feedback here: http://www.apple.com/feedback/

Maybe you are looking for