salve
qualcuno saprebbe indicarmi come estrapolare dal file jpeg le informazioni sulle modalità di scatto (esp, diaf, iso eq, flash, data, ...) in modo da visualizzarle a schermo o con un software gia compilato o meglio farmelo in visual basic se mi indicate alcune righe (ho provato a leggere il file in binario ma non riesco a trovare le informazioni e la chiave di codifica).
grazie
qualcuno saprebbe indicarmi come estrapolare dal file jpeg le informazioni sulle modalità di scatto (esp, diaf, iso eq, flash, data, ...) in modo da visualizzarle a schermo o con un software gia compilato o meglio farmelo in visual basic se mi indicate alcune righe (ho provato a leggere il file in binario ma non riesco a trovare le informazioni e la chiave di codifica).
grazie
Puoi provare Opanda IExif. E' freeware e si può scaricare da QUI
ciao e benvenuto.
Messaggio modificato da robyt il Dec 11 2005, 11:17 PM
ciao e benvenuto.
Messaggio modificato da robyt il Dec 11 2005, 11:17 PM
Questo è uno script che, se usato da Photoshop ad esempio, ti scrive alcuni dati presi dagli exif direttamente nella cornice dello scatto...
studialo un pò e fanne ciò che vuoi...
spero di esserti stato utile....
//************************************************************************
//
// Caption constants. Change these if you want to.
//
//************************************************************************
// Copyright string
c_CaptionCopyright = "Copyright © Giorgio Baruffi";
c_CaptionFont = "Verdana";
// Caption text
c_CaptionGpsPrefix = "Luogo:"
c_CaptionDateTimeTaken = "Data scatto:"
c_CaptionModel = "Macchina:"
c_CaptionExposureTime = "Tempo:"
c_CaptionAperture = "Apertura:"
c_CaptionFocalLength = "Focale:"
c_CaptionIsoRating = "ISO:"
//************************************************************************
//
// Date and time constants. Change these if you want to.
//
//************************************************************************
c_MonthsArray =
[
"Gen",
"Feb",
"Mar",
"Apr",
"Mag",
"Giu",
"Lug",
"Ago",
"Set",
"Ott",
"Nov",
"Dic"
];
c_AM = "am"
c_PM = "pm"
//************************************************************************
//
// Colors
//
//************************************************************************
function CreateSolidRgbColor(r, g, b)
{
var result = new SolidColor;
result.rgb.red = r;
result.rgb.green = g;
result.rgb.blue = b;
return result;
}
var colorCaptionBackground = CreateSolidRgbColor(255, 255, 255);
var colorFrame = CreateSolidRgbColor(0, 0, 0);
var colorText = CreateSolidRgbColor(0, 0, 0);
//************************************************************************
//
// Include EXIF constants and methods.
//
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// Note the this is not a comment: it includes the contents
// of ExifHelpers.inc in this script!
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//
//************************************************************************
//@include "ExifHelpers.inc"
//************************************************************************
//
// Functions
//
//************************************************************************
//
// Photoshop CS formats the latitude and longitude strings
// oddly:
//
// Example: 47.00 38.00' 33.60"
//
// There is no degrees symbol after the degrees, and
// they leave useless zeroes on the right side of the decimal
// point for both degrees and minutes. This function parses
// the numbers from the latitude and longitude strings, and
// inserts the correct characters where they belong:
//
// Example: 47° 38' 33.6"
//
// It returns an empty string if the string is in an unexpected
// form or doesn't exist.
//
function CorrectlyFormatLatitudeOrLongitude(strLatLong)
{
var strResult = new String("");
// Copy the input string
var strSource = new String(strLatLong);
// Find the first space
nIndex = strSource.indexOf(" ");
if (nIndex >= 0)
{
// Copy up to the first space
strDegrees = strSource.substr(0, nIndex);
// Skip this part, plus the space
strSource = strSource.substr(nIndex + 1);
// Find the tick mark
nIndex = strSource.indexOf("'");
if (nIndex >= 0)
{
// Copy up to the tick mark
strMinutes = strSource.substr(0, nIndex);
// Skip this chunk, plus the tick and space
strSource = strSource.substr(nIndex + 2);
// Find the seconds mark: "
nIndex = strSource.indexOf("\"");
if (nIndex >= 0)
{
// Copy up to the seconds
strSeconds = strSource.substr(0, nIndex);
// Get rid of extraneous trailing zeroes
var nDegrees = parseFloat(strDegrees);
var nMinutes = parseFloat(strMinutes);
var nSeconds = parseFloat(strSeconds);
// Use the correct symbols
strResult = nDegrees.toString() + "° " + nMinutes.toString() + "' " + nSeconds.toString() + "\"";
}
}
}
return strResult;
}
//
// This function gets the GPS location fields and formats them correctly
//
// It returns an empty string if they don't exist
//
function GetFormattedGpsData()
{
var strResult = new String("");
// Get the fields
strLatitude = GetRawExifValueIfPresent(c_ExifGpsLatitude);
strLatitudeRef = GetRawExifValueIfPresent(c_ExifGpsLatitudeRef);
strLongitude = GetRawExifValueIfPresent(c_ExifGpsLongitude);
strLongitudeRef = GetRawExifValueIfPresent(c_ExifGpsLongitudeRef);
// Do all of them exist?
if (strLatitude.length && strLatitudeRef.length && strLongitude.length && strLongitudeRef.length)
{
// Parse and reformat the latitude and longitude
strFinalLatitude = CorrectlyFormatLatitudeOrLongitude(strLatitude);
strFinalLongitude = CorrectlyFormatLatitudeOrLongitude(strLongitude);
// Are they still valid?
if (strFinalLatitude.length && strFinalLongitude.length)
{
// Create the result (with the constant prefix)
strResult = c_CaptionGpsPrefix + " " + strFinalLatitude + " " + strLatitudeRef + ", " + strFinalLongitude + " " + strLongitudeRef;
}
}
return strResult;
}
//
// EXIF dates are formatted kind of funny, with colons
// between the date tokens:
//
// Example: 2005:04:13 16:22:47
//
// This function parses the numbers out of the string
// and formats it like this:
//
// Example: Apr 13, 2005 4:22:47 pm
//
function CorrectlyFormatDateAndTime(strDateAndTime)
{
var strResult = new String("");
// Copy the input string
var strSource = new String(strDateAndTime);
// Find the first colon
nIndex = strSource.indexOf(":");
if (nIndex >= 0)
{
// Copy up to the first space
strYear = strSource.substr(0, nIndex);
// Skip past the colon
strSource = strSource.substr(nIndex + 1);
// Find the next colon
nIndex = strSource.indexOf(":");
if (nIndex >= 0)
{
// Copy up to colon
strMonth = strSource.substr(0, nIndex);
// Skip the colon
strSource = strSource.substr(nIndex + 1);
// Find the next space
nIndex = strSource.indexOf(" ");
if (nIndex >= 0)
{
// Copy up to the space
strDay = strSource.substr(0, nIndex);
// Skip the space
strSource = strSource.substr(nIndex + 1);
// Find the next colon
nIndex = strSource.indexOf(":");
if (nIndex >= 0)
{
// Save the hours
strHours = strSource.substr(0, nIndex);
// Skip the colon
strSource = strSource.substr(nIndex + 1);
// Find the next colon
nIndex = strSource.indexOf(":");
if (nIndex >= 0)
{
// Save the minutes
strMinutes = strSource.substr(0, nIndex);
// Skip the colon
strSource = strSource.substr(nIndex + 1);
// Save the seconds
strSeconds = strSource;
// Assume it is AM
strAmPm = c_AM;
// Is it after noon?
if (strHours >= 12)
{
// Use PM
strAmPm = c_PM;
// If it is after 13:00, subtract 12
if (strHours >= 13)
{
strHours -= 12;
}
}
// If it is 12:xx AM, make it 12:xx instead of 00:xx
else if (strHours == 0)
{
strHours = 12;
}
// Format the string
strResult = parseInt(strDay).toString() + " " + c_MonthsArray[parseInt(strMonth) - 1] + ", " + strYear + " " + parseInt(strHours).toString() + ":" + strMinutes + ":" + strSeconds + " " + strAmPm;
}
}
}
}
}
return strResult;
}
//
// If the value is not an empty string, prepend
// a caption and return the result
//
function GetPrefixedValue(strCaption, strValue)
{
var strResult = new String("");
if (strValue.length)
{
strResult = strCaption + " " + strValue;
}
return strResult;
}
//
// Get a simple EXIF property that doesn't need reformatting
// and prepend its title if the value is present
//
function GetPrefixedSimpleProperty(strCaption, strExifField)
{
return GetPrefixedValue(strCaption, GetRawExifValueIfPresent(strExifField));
}
//
// Format the date and time
//
function GetFormattedDateTimeTaken()
{
return GetPrefixedValue(c_CaptionDateTimeTaken, CorrectlyFormatDateAndTime(GetRawExifValueIfPresent(c_ExifDateTimeOriginal)));
}
//
// Get the model name of the camera.
//
// Unfortunately, there is little consistency for EXIF makes and models.
// For example, the Nikon Coolpix 990 looks like this:
//
// E990
//
// While the D2x looks like this:
//
// NIKON D2X
//
// If your camera has a user-unfriendly name, you might want to modify
// this function to return a user-friendly name.
//
function GetFormattedModel()
{
return GetPrefixedSimpleProperty(c_CaptionModel, c_ExifModel)
}
//
// EXIF exposure time
//
function GetFormattedExposureTime()
{
return GetPrefixedSimpleProperty(c_CaptionExposureTime, c_ExifExposureTime);
}
//
// EXIF f-Stop
//
function GetFormattedAperture()
{
return GetPrefixedSimpleProperty(c_CaptionAperture, c_ExifAperture);
}
//
// EXIF focal length
//
function GetFormattedFocalLength()
{
return GetPrefixedSimpleProperty(c_CaptionFocalLength, c_ExifFocalLength);
}
//
// EXIF ISO rating
//
function GetFormattedIsoRating()
{
return GetPrefixedSimpleProperty(c_CaptionIsoRating, c_ExifIsoSpeedRating);
}
//
// If strValue is not empty, add it to the array
//
function AddAvailableExifFieldToArray(availableFieldsArray, strValue)
{
// If we have a string, add it to the end of the array
if (strValue.length > 0)
{
availableFieldsArray[availableFieldsArray.length] = strValue;
}
}
//
// Extract the year from the EXIF date-taken
//
function GetYearFromDateTaken()
{
var strResult = new String("");
// Get the EXIF date taken
var strSource = GetRawExifValueIfPresent(c_ExifDateTimeOriginal);
if (strSource.length)
{
// Find the first colon
nIndex = strSource.indexOf(":");
if (nIndex >= 0)
{
// Copy up to the first colon
strResult = strSource.substr(0, nIndex);
}
}
// If we don't have a string, use today's date
if (strResult.length == 0)
{
strResult = ((new Date()).getYear() + 1900).toString();
}
return strResult;
}
//
// Format the copyright string
//
function GetFormattedCopyright()
{
// Start with the copyright string
var strResult = new String(c_CaptionCopyright);
// Get the year
var strYear = GetYearFromDateTaken();
if (strYear.length != 0)
{
// Append it (after a comma and a space)
strResult += ", " + strYear;
}
return strResult;
}
//
// Get all of the interesting EXIF fields, format them, and put them in a comma
// separated string for display.
//
function GetAllAvailableFields()
{
// Add all of the fields to the array
var AvailableFields = new Array;
AddAvailableExifFieldToArray(AvailableFields, GetFormattedModel());
AddAvailableExifFieldToArray(AvailableFields, GetFormattedExposureTime());
AddAvailableExifFieldToArray(AvailableFields, GetFormattedAperture());
AddAvailableExifFieldToArray(AvailableFields, GetFormattedFocalLength());
AddAvailableExifFieldToArray(AvailableFields, GetFormattedIsoRating());
AddAvailableExifFieldToArray(AvailableFields, GetFormattedGpsData());
AddAvailableExifFieldToArray(AvailableFields, GetFormattedDateTimeTaken());
// Turn it into one big string
var strResult = new String;
for (nCurrentEntry = 0; nCurrentEntry < AvailableFields.length; ++nCurrentEntry)
{
if (nCurrentEntry != 0)
{
strResult += ", ";
}
strResult += AvailableFields[nCurrentEntry];
}
return strResult;
}
//************************************************************************
//
// Begin script
//
//************************************************************************
function Main()
{
if (app.documents.length > 0)
{
// Save the old background color and ruler units
var oldRulerUnits = preferences.rulerUnits;
var oldBackgroundColor = backgroundColor;
try
{
// Turn off dialog boxes
displayDialogs = DialogModes.NO;
// Use inches for our scale
preferences.rulerUnits = Units.INCHES;
// Decide which axis is longer
var nLongAxis = (activeDocument.height.value > activeDocument.width.value) ? activeDocument.height.value : activeDocument.width.value;
// Calculate the border thickness
var nBorderThickness = nLongAxis / 400;
// How big do we want the font?
var nFontHeight = nLongAxis / 70;
// Calculate the text area height
var nTextAreaHeight = nFontHeight * 3;
// Convert the font size to points
var nFontHeightInPoints = nFontHeight * 72;
// Add the frame
backgroundColor = colorFrame;
activeDocument.resizeCanvas(activeDocument.width.value + nBorderThickness*1, activeDocument.height.value + nBorderThickness*1, AnchorPosition.MIDDLECENTER);
// Save the bottom of the image frame before we add the caption area
var nBottomOfFrame = activeDocument.height.value;
// Add the caption area
backgroundColor = colorCaptionBackground;
activeDocument.resizeCanvas(activeDocument.width.value, activeDocument.height.value + nTextAreaHeight, AnchorPosition.TOPCENTER);
// Create the caption ("\u000D" is a new-line)
var strCaption = GetFormattedCopyright() + "\u000D" + GetAllAvailableFields();
// Create the text layer
var newTextLayer = activeDocument.artLayers.add();
newTextLayer.kind = LayerKind.TEXT;
newTextLayer.textItem.font = c_CaptionFont;
newTextLayer.textItem.position = [nBorderThickness, nBottomOfFrame + nFontHeight*0.8 + nBorderThickness];
newTextLayer.textItem.size = nFontHeightInPoints;
newTextLayer.textItem.color = colorText;
newTextLayer.textItem.contents = strCaption;
}
catch (e)
{
alert(e);
}
// Restore the background color and ruler units
backgroundColor = oldBackgroundColor;
preferences.rulerUnits = oldRulerUnits;
}
else
{
alert("You don't have an image opened. Please open an image before running this script.");
}
}
Main();
studialo un pò e fanne ciò che vuoi...
spero di esserti stato utile....
CODE
//************************************************************************
//
// Caption constants. Change these if you want to.
//
//************************************************************************
// Copyright string
c_CaptionCopyright = "Copyright © Giorgio Baruffi";
c_CaptionFont = "Verdana";
// Caption text
c_CaptionGpsPrefix = "Luogo:"
c_CaptionDateTimeTaken = "Data scatto:"
c_CaptionModel = "Macchina:"
c_CaptionExposureTime = "Tempo:"
c_CaptionAperture = "Apertura:"
c_CaptionFocalLength = "Focale:"
c_CaptionIsoRating = "ISO:"
//************************************************************************
//
// Date and time constants. Change these if you want to.
//
//************************************************************************
c_MonthsArray =
[
"Gen",
"Feb",
"Mar",
"Apr",
"Mag",
"Giu",
"Lug",
"Ago",
"Set",
"Ott",
"Nov",
"Dic"
];
c_AM = "am"
c_PM = "pm"
//************************************************************************
//
// Colors
//
//************************************************************************
function CreateSolidRgbColor(r, g, b)
{
var result = new SolidColor;
result.rgb.red = r;
result.rgb.green = g;
result.rgb.blue = b;
return result;
}
var colorCaptionBackground = CreateSolidRgbColor(255, 255, 255);
var colorFrame = CreateSolidRgbColor(0, 0, 0);
var colorText = CreateSolidRgbColor(0, 0, 0);
//************************************************************************
//
// Include EXIF constants and methods.
//
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// Note the this is not a comment: it includes the contents
// of ExifHelpers.inc in this script!
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//
//************************************************************************
//@include "ExifHelpers.inc"
//************************************************************************
//
// Functions
//
//************************************************************************
//
// Photoshop CS formats the latitude and longitude strings
// oddly:
//
// Example: 47.00 38.00' 33.60"
//
// There is no degrees symbol after the degrees, and
// they leave useless zeroes on the right side of the decimal
// point for both degrees and minutes. This function parses
// the numbers from the latitude and longitude strings, and
// inserts the correct characters where they belong:
//
// Example: 47° 38' 33.6"
//
// It returns an empty string if the string is in an unexpected
// form or doesn't exist.
//
function CorrectlyFormatLatitudeOrLongitude(strLatLong)
{
var strResult = new String("");
// Copy the input string
var strSource = new String(strLatLong);
// Find the first space
nIndex = strSource.indexOf(" ");
if (nIndex >= 0)
{
// Copy up to the first space
strDegrees = strSource.substr(0, nIndex);
// Skip this part, plus the space
strSource = strSource.substr(nIndex + 1);
// Find the tick mark
nIndex = strSource.indexOf("'");
if (nIndex >= 0)
{
// Copy up to the tick mark
strMinutes = strSource.substr(0, nIndex);
// Skip this chunk, plus the tick and space
strSource = strSource.substr(nIndex + 2);
// Find the seconds mark: "
nIndex = strSource.indexOf("\"");
if (nIndex >= 0)
{
// Copy up to the seconds
strSeconds = strSource.substr(0, nIndex);
// Get rid of extraneous trailing zeroes
var nDegrees = parseFloat(strDegrees);
var nMinutes = parseFloat(strMinutes);
var nSeconds = parseFloat(strSeconds);
// Use the correct symbols
strResult = nDegrees.toString() + "° " + nMinutes.toString() + "' " + nSeconds.toString() + "\"";
}
}
}
return strResult;
}
//
// This function gets the GPS location fields and formats them correctly
//
// It returns an empty string if they don't exist
//
function GetFormattedGpsData()
{
var strResult = new String("");
// Get the fields
strLatitude = GetRawExifValueIfPresent(c_ExifGpsLatitude);
strLatitudeRef = GetRawExifValueIfPresent(c_ExifGpsLatitudeRef);
strLongitude = GetRawExifValueIfPresent(c_ExifGpsLongitude);
strLongitudeRef = GetRawExifValueIfPresent(c_ExifGpsLongitudeRef);
// Do all of them exist?
if (strLatitude.length && strLatitudeRef.length && strLongitude.length && strLongitudeRef.length)
{
// Parse and reformat the latitude and longitude
strFinalLatitude = CorrectlyFormatLatitudeOrLongitude(strLatitude);
strFinalLongitude = CorrectlyFormatLatitudeOrLongitude(strLongitude);
// Are they still valid?
if (strFinalLatitude.length && strFinalLongitude.length)
{
// Create the result (with the constant prefix)
strResult = c_CaptionGpsPrefix + " " + strFinalLatitude + " " + strLatitudeRef + ", " + strFinalLongitude + " " + strLongitudeRef;
}
}
return strResult;
}
//
// EXIF dates are formatted kind of funny, with colons
// between the date tokens:
//
// Example: 2005:04:13 16:22:47
//
// This function parses the numbers out of the string
// and formats it like this:
//
// Example: Apr 13, 2005 4:22:47 pm
//
function CorrectlyFormatDateAndTime(strDateAndTime)
{
var strResult = new String("");
// Copy the input string
var strSource = new String(strDateAndTime);
// Find the first colon
nIndex = strSource.indexOf(":");
if (nIndex >= 0)
{
// Copy up to the first space
strYear = strSource.substr(0, nIndex);
// Skip past the colon
strSource = strSource.substr(nIndex + 1);
// Find the next colon
nIndex = strSource.indexOf(":");
if (nIndex >= 0)
{
// Copy up to colon
strMonth = strSource.substr(0, nIndex);
// Skip the colon
strSource = strSource.substr(nIndex + 1);
// Find the next space
nIndex = strSource.indexOf(" ");
if (nIndex >= 0)
{
// Copy up to the space
strDay = strSource.substr(0, nIndex);
// Skip the space
strSource = strSource.substr(nIndex + 1);
// Find the next colon
nIndex = strSource.indexOf(":");
if (nIndex >= 0)
{
// Save the hours
strHours = strSource.substr(0, nIndex);
// Skip the colon
strSource = strSource.substr(nIndex + 1);
// Find the next colon
nIndex = strSource.indexOf(":");
if (nIndex >= 0)
{
// Save the minutes
strMinutes = strSource.substr(0, nIndex);
// Skip the colon
strSource = strSource.substr(nIndex + 1);
// Save the seconds
strSeconds = strSource;
// Assume it is AM
strAmPm = c_AM;
// Is it after noon?
if (strHours >= 12)
{
// Use PM
strAmPm = c_PM;
// If it is after 13:00, subtract 12
if (strHours >= 13)
{
strHours -= 12;
}
}
// If it is 12:xx AM, make it 12:xx instead of 00:xx
else if (strHours == 0)
{
strHours = 12;
}
// Format the string
strResult = parseInt(strDay).toString() + " " + c_MonthsArray[parseInt(strMonth) - 1] + ", " + strYear + " " + parseInt(strHours).toString() + ":" + strMinutes + ":" + strSeconds + " " + strAmPm;
}
}
}
}
}
return strResult;
}
//
// If the value is not an empty string, prepend
// a caption and return the result
//
function GetPrefixedValue(strCaption, strValue)
{
var strResult = new String("");
if (strValue.length)
{
strResult = strCaption + " " + strValue;
}
return strResult;
}
//
// Get a simple EXIF property that doesn't need reformatting
// and prepend its title if the value is present
//
function GetPrefixedSimpleProperty(strCaption, strExifField)
{
return GetPrefixedValue(strCaption, GetRawExifValueIfPresent(strExifField));
}
//
// Format the date and time
//
function GetFormattedDateTimeTaken()
{
return GetPrefixedValue(c_CaptionDateTimeTaken, CorrectlyFormatDateAndTime(GetRawExifValueIfPresent(c_ExifDateTimeOriginal)));
}
//
// Get the model name of the camera.
//
// Unfortunately, there is little consistency for EXIF makes and models.
// For example, the Nikon Coolpix 990 looks like this:
//
// E990
//
// While the D2x looks like this:
//
// NIKON D2X
//
// If your camera has a user-unfriendly name, you might want to modify
// this function to return a user-friendly name.
//
function GetFormattedModel()
{
return GetPrefixedSimpleProperty(c_CaptionModel, c_ExifModel)
}
//
// EXIF exposure time
//
function GetFormattedExposureTime()
{
return GetPrefixedSimpleProperty(c_CaptionExposureTime, c_ExifExposureTime);
}
//
// EXIF f-Stop
//
function GetFormattedAperture()
{
return GetPrefixedSimpleProperty(c_CaptionAperture, c_ExifAperture);
}
//
// EXIF focal length
//
function GetFormattedFocalLength()
{
return GetPrefixedSimpleProperty(c_CaptionFocalLength, c_ExifFocalLength);
}
//
// EXIF ISO rating
//
function GetFormattedIsoRating()
{
return GetPrefixedSimpleProperty(c_CaptionIsoRating, c_ExifIsoSpeedRating);
}
//
// If strValue is not empty, add it to the array
//
function AddAvailableExifFieldToArray(availableFieldsArray, strValue)
{
// If we have a string, add it to the end of the array
if (strValue.length > 0)
{
availableFieldsArray[availableFieldsArray.length] = strValue;
}
}
//
// Extract the year from the EXIF date-taken
//
function GetYearFromDateTaken()
{
var strResult = new String("");
// Get the EXIF date taken
var strSource = GetRawExifValueIfPresent(c_ExifDateTimeOriginal);
if (strSource.length)
{
// Find the first colon
nIndex = strSource.indexOf(":");
if (nIndex >= 0)
{
// Copy up to the first colon
strResult = strSource.substr(0, nIndex);
}
}
// If we don't have a string, use today's date
if (strResult.length == 0)
{
strResult = ((new Date()).getYear() + 1900).toString();
}
return strResult;
}
//
// Format the copyright string
//
function GetFormattedCopyright()
{
// Start with the copyright string
var strResult = new String(c_CaptionCopyright);
// Get the year
var strYear = GetYearFromDateTaken();
if (strYear.length != 0)
{
// Append it (after a comma and a space)
strResult += ", " + strYear;
}
return strResult;
}
//
// Get all of the interesting EXIF fields, format them, and put them in a comma
// separated string for display.
//
function GetAllAvailableFields()
{
// Add all of the fields to the array
var AvailableFields = new Array;
AddAvailableExifFieldToArray(AvailableFields, GetFormattedModel());
AddAvailableExifFieldToArray(AvailableFields, GetFormattedExposureTime());
AddAvailableExifFieldToArray(AvailableFields, GetFormattedAperture());
AddAvailableExifFieldToArray(AvailableFields, GetFormattedFocalLength());
AddAvailableExifFieldToArray(AvailableFields, GetFormattedIsoRating());
AddAvailableExifFieldToArray(AvailableFields, GetFormattedGpsData());
AddAvailableExifFieldToArray(AvailableFields, GetFormattedDateTimeTaken());
// Turn it into one big string
var strResult = new String;
for (nCurrentEntry = 0; nCurrentEntry < AvailableFields.length; ++nCurrentEntry)
{
if (nCurrentEntry != 0)
{
strResult += ", ";
}
strResult += AvailableFields[nCurrentEntry];
}
return strResult;
}
//************************************************************************
//
// Begin script
//
//************************************************************************
function Main()
{
if (app.documents.length > 0)
{
// Save the old background color and ruler units
var oldRulerUnits = preferences.rulerUnits;
var oldBackgroundColor = backgroundColor;
try
{
// Turn off dialog boxes
displayDialogs = DialogModes.NO;
// Use inches for our scale
preferences.rulerUnits = Units.INCHES;
// Decide which axis is longer
var nLongAxis = (activeDocument.height.value > activeDocument.width.value) ? activeDocument.height.value : activeDocument.width.value;
// Calculate the border thickness
var nBorderThickness = nLongAxis / 400;
// How big do we want the font?
var nFontHeight = nLongAxis / 70;
// Calculate the text area height
var nTextAreaHeight = nFontHeight * 3;
// Convert the font size to points
var nFontHeightInPoints = nFontHeight * 72;
// Add the frame
backgroundColor = colorFrame;
activeDocument.resizeCanvas(activeDocument.width.value + nBorderThickness*1, activeDocument.height.value + nBorderThickness*1, AnchorPosition.MIDDLECENTER);
// Save the bottom of the image frame before we add the caption area
var nBottomOfFrame = activeDocument.height.value;
// Add the caption area
backgroundColor = colorCaptionBackground;
activeDocument.resizeCanvas(activeDocument.width.value, activeDocument.height.value + nTextAreaHeight, AnchorPosition.TOPCENTER);
// Create the caption ("\u000D" is a new-line)
var strCaption = GetFormattedCopyright() + "\u000D" + GetAllAvailableFields();
// Create the text layer
var newTextLayer = activeDocument.artLayers.add();
newTextLayer.kind = LayerKind.TEXT;
newTextLayer.textItem.font = c_CaptionFont;
newTextLayer.textItem.position = [nBorderThickness, nBottomOfFrame + nFontHeight*0.8 + nBorderThickness];
newTextLayer.textItem.size = nFontHeightInPoints;
newTextLayer.textItem.color = colorText;
newTextLayer.textItem.contents = strCaption;
}
catch (e)
{
alert(e);
}
// Restore the background color and ruler units
backgroundColor = oldBackgroundColor;
preferences.rulerUnits = oldRulerUnits;
}
else
{
alert("You don't have an image opened. Please open an image before running this script.");
}
}
Main();
fantastico, ma come si usa?
QUOTE(buzz @ Dec 12 2005, 12:11 AM)
Devi salvare lo script con estensione .js e metterlo nella cartella script di photoshop (il percorso standard è questo "C:\Programmi\Adobe\Photoshop CS\Presets\Scripts") A questo punto aprendo il menu "File" troverai il nuovo script sotto il menu "Scripts"....... peccato che non funzioni!
Giorgioooooo,
premesso che non conosco molto bene java, quando cerco di utilizzare lo script mi dà il seguente errore:
Error 48: File or folders does not exist.
Line: 75
-> //@include "ExifHelpers.inc"
che faccio?
? è un errore che a me non da...
ed è un file che non ho, quindi non cerca nulla di esterno... sicuro di aver copiato giusto?
ed è un file che non ho, quindi non cerca nulla di esterno... sicuro di aver copiato giusto?
QUOTE(robyt @ Dec 12 2005, 02:29 AM)
Devi salvare lo script con estensione .js e metterlo nella cartella script di photoshop (il percorso standard è questo "C:\Programmi\Adobe\Photoshop CS\Presets\Scripts") A questo punto aprendo il menu "File" troverai il nuovo script sotto il menu "Scripts"....... peccato che non funzioni!
Giorgioooooo,
premesso che non conosco molto bene java, quando cerco di utilizzare lo script mi dà il seguente errore:
Error 48: File or folders does not exist.
Line: 75
-> //@include "ExifHelpers.inc"
che faccio?
Giorgioooooo,
premesso che non conosco molto bene java, quando cerco di utilizzare lo script mi dà il seguente errore:
Error 48: File or folders does not exist.
Line: 75
-> //@include "ExifHelpers.inc"
che faccio?
Salve,
ho provato anche io (mi interessava il js), ma ottengo lo stesso errore
ciao e grazie
Roberto
Messaggio modificato da robertogregori il Dec 12 2005, 06:48 AM
Beh, in effetti l'errore è normale.... C'è scritto di INCLUDERE un file che si chiama ExifHelpers.inc ma il file non c'è.....
x Giorgio:
dovresti postare anche il contenuto di quel file.... Che è il + ed il meglio
Un saluto a tutti.
x Giorgio:
dovresti postare anche il contenuto di quel file.... Che è il + ed il meglio
Un saluto a tutti.
ragazzi, sono un po' duro... ma adesso che ho rinominato il file in .js e messo tra gli altri .js di Ph.CS come lancio lo script dal programma?
non è un'azione e l'help non mi dice nulla...
non è un'azione e l'help non mi dice nulla...
QUOTE(buzz @ Dec 12 2005, 03:49 PM)
ragazzi, sono un po' duro... ma adesso che ho rinominato il file in .js e messo tra gli altri .js di Ph.CS come lancio lo script dal programma?
non è un'azione e l'help non mi dice nulla...
non è un'azione e l'help non mi dice nulla...
file-> scripts...
e vedrai che compare il nome del file rinominato in js
ciao
roberto
QUOTE(spicchi @ Dec 12 2005, 01:36 PM)
Beh, in effetti l'errore è normale.... C'è scritto di INCLUDERE un file che si chiama ExifHelpers.inc ma il file non c'è.....
x Giorgio:
dovresti postare anche il contenuto di quel file.... Che è il + ed il meglio
x Giorgio:
dovresti postare anche il contenuto di quel file.... Che è il + ed il meglio
Anche a me da lo stesso errore alla linea 76 (uso CS su MAC), direi anch'io che manca un pezzo allo script... ma la cosa è interessante. Giorgio ci puoi aiutare, grazie
giusto...
è nella stessa cartella dello script...
// EXIF constants
c_ExifGpsLatitudeRef = "GPS Latitude Ref"
c_ExifGpsLatitude = "GPS Latitude"
c_ExifGpsLongitudeRef = "GPS Longitude Ref"
c_ExifGpsLongitude = "GPS Longitude"
c_ExifGpsAltitudeRef = "GPS Altitude Ref"
c_ExifGpsAltitude = "GPS Altitude"
c_ExifGpsTimeStamp = "GPS Time Stamp"
c_ExifMake = "Make"
c_ExifModel = "Model"
c_ExifExposureTime = "Exposure Time"
c_ExifAperture = "F-Stop"
c_ExifExposureProgram = "Exposure Program"
c_ExifIsoSpeedRating = "ISO Speed Ratings"
c_ExifDateTimeOriginal = "Date Time Original"
c_ExifMaxApertureValue = "Max Aperture Value"
c_ExifMeteringMode = "Metering Mode"
c_ExifLightSource = "Light Source"
c_ExifFlash = "Flash"
c_ExifFocalLength = "Focal Length"
c_ExifColorSpace = "Color Space"
c_ExifWidth = "Pixel X Dimension"
c_ExifHeight = "Pixel Y Dimension"
function GetRawExifValueIfPresent(strExifValueName)
{
// Empty string means it wasn't found
var strResult = new String("");
// Make sure there is a current document
if (app.documents.length)
{
// Loop through each element in the EXIF properties array
for (nCurrentElement = 0, nCount = 0; nCurrentElement < activeDocument.info.exif.length; ++nCurrentElement)
{
// Get the current element as a string
var strCurrentRecord = new String(activeDocument.info.exif[nCurrentElement]);
// Find the first comma
var nComma = strCurrentRecord.indexOf(",");
if (nComma >= 0)
{
// Everything before the comma is the field name
var strCurrentExifName = strCurrentRecord.substr(0, nComma);
// Is it a valid string?
if (strCurrentExifName.length)
{
// Is this our element?
if (strCurrentExifName == strExifValueName)
{
// Everything after the comma is the value, so
// save it and exit the loop
strResult = strCurrentRecord.substr(nComma + 1);
break;
}
}
}
}
}
return strResult;
}
è nella stessa cartella dello script...
CODE
// EXIF constants
c_ExifGpsLatitudeRef = "GPS Latitude Ref"
c_ExifGpsLatitude = "GPS Latitude"
c_ExifGpsLongitudeRef = "GPS Longitude Ref"
c_ExifGpsLongitude = "GPS Longitude"
c_ExifGpsAltitudeRef = "GPS Altitude Ref"
c_ExifGpsAltitude = "GPS Altitude"
c_ExifGpsTimeStamp = "GPS Time Stamp"
c_ExifMake = "Make"
c_ExifModel = "Model"
c_ExifExposureTime = "Exposure Time"
c_ExifAperture = "F-Stop"
c_ExifExposureProgram = "Exposure Program"
c_ExifIsoSpeedRating = "ISO Speed Ratings"
c_ExifDateTimeOriginal = "Date Time Original"
c_ExifMaxApertureValue = "Max Aperture Value"
c_ExifMeteringMode = "Metering Mode"
c_ExifLightSource = "Light Source"
c_ExifFlash = "Flash"
c_ExifFocalLength = "Focal Length"
c_ExifColorSpace = "Color Space"
c_ExifWidth = "Pixel X Dimension"
c_ExifHeight = "Pixel Y Dimension"
function GetRawExifValueIfPresent(strExifValueName)
{
// Empty string means it wasn't found
var strResult = new String("");
// Make sure there is a current document
if (app.documents.length)
{
// Loop through each element in the EXIF properties array
for (nCurrentElement = 0, nCount = 0; nCurrentElement < activeDocument.info.exif.length; ++nCurrentElement)
{
// Get the current element as a string
var strCurrentRecord = new String(activeDocument.info.exif[nCurrentElement]);
// Find the first comma
var nComma = strCurrentRecord.indexOf(",");
if (nComma >= 0)
{
// Everything before the comma is the field name
var strCurrentExifName = strCurrentRecord.substr(0, nComma);
// Is it a valid string?
if (strCurrentExifName.length)
{
// Is this our element?
if (strCurrentExifName == strExifValueName)
{
// Everything after the comma is the value, so
// save it and exit the loop
strResult = strCurrentRecord.substr(nComma + 1);
break;
}
}
}
}
}
return strResult;
}
adesso funziona!!!
grande programma, grande programmatore.
grande programma, grande programmatore.
Grazie Giorgio.
grazie anche da parte mia!
penso che personalizzerò alcune parti (es. formattazione data), ma come base e' fantastica.
peccato solo che non riesca ad estrarre gli ISO, dato come d70 gestisce il metadato; se qualcuno sà dove si trova il dato iso ci si potrebbe sempre provare.......
grazie
roberto
Messaggio modificato da robertogregori il Dec 13 2005, 12:06 AM
penso che personalizzerò alcune parti (es. formattazione data), ma come base e' fantastica.
peccato solo che non riesca ad estrarre gli ISO, dato come d70 gestisce il metadato; se qualcuno sà dove si trova il dato iso ci si potrebbe sempre provare.......
grazie
roberto
Messaggio modificato da robertogregori il Dec 13 2005, 12:06 AM
QUOTE(robyt @ Dec 12 2005, 01:29 AM)
Devi salvare lo script con estensione .js e metterlo nella cartella script di photoshop (il percorso standard è questo "C:\Programmi\Adobe\Photoshop CS\Presets\Scripts") A questo punto aprendo il menu "File" troverai il nuovo script sotto il menu "Scripts"....... peccato che non funzioni!
Mi indicate come devo fara?
Ho selezionato tutto lo script (il secondo postato da Giorgio) poi ho cercato di metterlo nella cartella scripts di photoshop, ma seguendo il percorso sopra indicato dopo photoshop CS non trovo la cartella Presets e poi Scripts.
Il mio programma è in italiano forse le cartelle sono nominate diversamente...
Aspetto vostri chiarimenti!
Luigi
... i file da aggiungere sono 2? Possono essere rinominati ABCD.js
oppure con nome specifico?
grazie
oppure con nome specifico?
grazie
Seleziona e copia tutto il primo script postato da Giorgio, poi vai nella cartella script di PS e con il destro del mouse apri il menu e scegli nuovo/nuovo documento di testo.
Nel documento appena creato, c’incolli il contenuto dello script e il file di testo lo nomini exif.js.
Poi fai la stessa procedura per il secondo script postato da Giorgio, però questa volta il file di testo lo nomini ExifHelpers.inc.
Nel documento appena creato, c’incolli il contenuto dello script e il file di testo lo nomini exif.js.
Poi fai la stessa procedura per il secondo script postato da Giorgio, però questa volta il file di testo lo nomini ExifHelpers.inc.
Ottimo GIorgio...gli ho dato una ritoccatina perchè quando la foto è in verticale le scritte della seconda riga risultano più lunghe delle dimensioni della larghezza della foto stessa quindi non entrano.
Ho messo un ritorno a capo "tattico" che separa così le 3 righe: copyright, dati scatto, data...
Se qualcuno è interessato allego il file modificato o se avete risolto in maniera più brillante rimango in attesa...
Ho messo un ritorno a capo "tattico" che separa così le 3 righe: copyright, dati scatto, data...
Se qualcuno è interessato allego il file modificato o se avete risolto in maniera più brillante rimango in attesa...
La cartella la trovi in c:/programmi/Adobe/Adobe Photoshop Cs2/Presets/Scripts
...come al solito...ecco il file.
Va rinominato in .js che altrimenti non riuscivo ad allegarlo e ovviamente va cambiato il copyright all'interno...
G.
Messaggio modificato da Giuseppe78 il Feb 8 2006, 07:17 PM
Va rinominato in .js che altrimenti non riuscivo ad allegarlo e ovviamente va cambiato il copyright all'interno...
G.
Messaggio modificato da Giuseppe78 il Feb 8 2006, 07:17 PM
File allegati
Giuseppe
Ci sto provando anche io ed ho seguito le info fornite. Purtroppo poi facendo File>scripts non è presente la scelta: exif. Nella cartella scripts, tutti gli altri file, i cui nomi invece appaiono correttamente facendo File>scripts, hanno l'icona di una tazzina di caffè e sono del tipo Adobe java Script file; quelli che invece ho creato io sono dei documenti di testo. Dove ho sbaglaito?
Grazie a chi mi può aiutare.
Ciao
Grazie a chi mi può aiutare.
Ciao