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
-
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.SHi 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,
jtThe 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.comThe 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/cameraUPDATE - 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!
Mattthe 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. 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 KBThanks 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?
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
-
Why does only the first page of seach results show, with further pages graying out?
In a search, I may get >1,000,000,000 hits, but only the first page is readable. "Next" gives me a grayed out screen and FF freezes. Any of the offered searches at the bottom of that first screen will do the same thing. Repeated hitting "back" will c
-
what would cause adobe connect to freeze in a session for users, while the moderator session did not
-
I have a plan to install OEL 6 for Oracle DB 11g & OEMGC in my Server. But I need to make sure all Oracle-validated patches available in OEL 6 & I can install DATABASE & OEMGC in OEL 6 properly....I had seen a mail in OTN which mentioned there is no
-
Hi All, One Quick Question : I need to declare some vendor's QM Process as Self certified for which the Inspection Lot should not be created despite of Active Insp Type 01. I have a declare the Actaul QM system as "certified" in OQB7 and in Q Info Re
-
I need to be able to parse out the month, day of month and the time from a date object into separate fields. I know I can use the getTime() method to retrieve the milliseconds which I believe I can work with, but I also need the month and day.