Images Started to be Offset

Hello
We are developing a website for a client and are constantly reviewing our progress using Safari. A year or so ago we updated 2 of our iMacs from Safari 5.1.7 to the next version and all of a sudden images on the web pages were offset. It was as if the HTML/CSS/Javascript was not being interpreted properly. However if you clicked on to another page and then returned all would be well!
This was so frustrating that we painfully reverted back to 5.1.7 and thankfully the problem went away. Another designer in the studio soldiered on continuing to update his Safari so that we could monitor if an update fixed the problem. It still offsets the images.
Curiously I have just purchased a new Mac Pro with OS X 10.8.2 (Mountain Lion) and Safari 6.0.1 and I haven't experienced the problem.
It almost seems as if some external source is upsetting how Safari interprets the HTML/CSS/Javascript as my clean Mac Pro has not yet been subjected to it and so displays the web page correctly.
If anyone has any advice or has seen this I would be very interested to hear from you.
Thanks
Chris

Hi
I made a mistake and can't see how to edit my question above. It was Safari 4.0.5 which worked well and the next update after this was when our images started to disappear off the side of the page.
Thanks
Chris

Similar Messages

  • LR 1.1 Improves Greatly on Image Starting Point.

    Has anyone else noticed how much better LR 1.1 does compared with LR 1.0 providing the image starting point upon import? I don't think I'm dreaming it but would like some affirmations -- or NOT.
    I use a 20d and a linear tone curve.

    Fred
    Think you might just be right there. For broad spectrum images I do feel there is some improvement in the initial view, either that or my eye sight has improved over the last two weeks :-). Not for *Reds* though which are as terrible as ever. It's said that they chose a sample of cameras (in my case 30D) to set the calibration but I can't believe that the variance in production for the 30D was so great that the models chosen by Adobe for the calibration gave such good Reds whilst at the same time it has been mentioned time and time again on this forum that the *Reds* are just darn horrible.

  • OSD reference image starts perfect, then begins to degrade resulting in BSOD during OSD

    SCCM 2012 R2 on Server 2008R2.
    We create our thick reference images in MDT after Patch Tuesday with a build and capture. We don't change our SCCM Deploy Windows TS so the package ID stays the same and we simply overwrite the old .Wim file each time. Our problem is that everything starts
    out great and our Tier-2 techs are able to image machines as expected. But over time (it could be a week or a few days) during deployment machines begin to BSOD, get stuck with black screens with only a cursor, or Boot\BCD at the very end of the TS as Windows
    starts services, or it'll build seemingly fine and MS Office will try to install for every user and the Windows search bar is missing. Just a bunch of weird nuances. But here's the kicker, if we build in a VM everything is perfect and works the way we designed
    it in the reference build.
    This TS deploys two OS's, The x64 begins to degrade, the x86 continues without any problems
    The same reference image in a separate site (for testing) works fine with no issues. (SCCM 2012R2 on Server 2012)
    After replacing the reference image Wim file the builds work, immediately
    We only use boot media for our TS, no PXE
    We build in the same OU for testing and production which blocks inheritance
    Where ever you go, there you are.

    Why don't you add the new image to SCCM through the GUI like it's supposed to be done?
    I think saying "supposed to" is a bit argumentative, especially since MDT integrates with SCCM. However, we want a clean non-site specific image so we can use it with more than one site. We use SCCM for OSD only, the SCCM agent does not remain after the
    image is deployed on the client. Automating the image creation with Powershell in MDT is also a huge benefit.
    Regardless, the image begins just fine. It seems something is changing in the environment over time and that's the real issue I believe, not our proven image creation method we've been using for well over a year. It wasn't until we upgraded from SCCM2012
    to SCCM2012R2 that we began to see issues.
    Where ever you go, there you are.

  • Recently my images started to print too dark.

    I am running LR 4.4, on an Epson XP-850, in OS X 10.9.4 and color profile both the monitor and the printer with ColorMunki Photo.  I have re-calibrated three times and each time the prints are WAY too dark.    I get the same problem in PS CS5.1.  If I print from preview, they actually look better.    If I have the Printer manage colors from LR, it looks better.   It's like there's a compatibility issue?  I have the latest driver from Epson, and have custom profiled my paper to my printer to my monitor?!   My printing issues are unique to PS and LR applications which is why I'm starting here.   Does anyone have any ideas?   I've already uninstalled and reinstalled the printer.  I have all the latest firmware and software updates.   Thank you!

    Easy to say calibrate your monitor but there is much more to look at too. Here is a nice link to read:
    http://www.northlight-images.co.uk/article_pages/colour_management/prints_too_dark.html

  • How can I delete the image outside of this offset path?

    I'm really new to Illustrator, and I'm trying to print an image that will have a CutContour swatch around it, with a bleed outside of the CutContour line. You'll see that I set up the bleed by creating an offset path outside of the CutContour path. However, I would like to delete the rest of the image outside of that, but I'm not sure how to do this. I don't want to print the entire block of the photograph, just the image inside the tracing, leaving the outside white. I thought I could select the offset path and make a Clipping Mask from that but it says it's "too complex" or doesn't do anything at all. I've attached an example since it will probably make more sense to have something to look at in addition to my explanation...

    If there are a lot of points in the path you are trying to use as a clipping mask, you could try;
    Object > Path > Simplify
    Turn on preview, and play with the settings while watching the shape and number of points.
    --OB

  • Time since loop starting. Without Offset!!!!

    I try to make an indicator that displays the time since the loop started. it sounds quite easy with the "Get time in seconds" and the "format time string". but I always have an offset of exactly 2 hours. Why????
    this problem might be stupid but I don't find any solution.
    Thanks for any help.

    Format time string uses absolute time so what you see is the UTC offset in your timezone. If you format to include date, you will see that the offset is really 99 years since the epoch in LabVIEW is Jan 1, 1903 UTC.
    You can use a numeric indicator and in Format and Precision, select "Relative Time" or write your own formatting VI for relative time if the relative time display doesn't fit your needs.
    LabVIEW, C'est LabVIEW

  • Opening an image in Photoshop CC, and select pixels with any method, the image starts to blink

    The entire image is what is blinking, while the photoshop tools remain on.

    I actually figured out that just changing the resolution of the screen fixed the problem.  The screen resolution had to be different from what it was.  Both lowering and raising it fixed the problem.  Strange.

  • In the Picture control, how can I draw a small image at a specific offset within a larger image?

    I could use the opposite of "Get Image Subset.vi", like a "Set Image Subset.vi".
    The "Draw Flattened Pixmap" function would work if it would let me define the target position instead of the source position.
    Solved!
    Go to Solution.

    You can use "Draw Unflattened Pixmap.vi". Here is an example:
    Marc Dubois
    HaroTek LLC
    www.harotek.com

  • I'm trying to play an .mp4 video, but it does not display smoothly; image is jumpy.  The sound is fine, but the image starts and stops.  When I play the same file in WMV, displays just fine.

    Any suggestions on what I can try to clear this up?  Videos that I have downloaded through iTunes work just fine.  I don't know how to troubleshoot this file to see what is causing the issue.

    bertjones00 wrote:
    It reads other DVD's just fine.  I've tried playing commercial DVD's and homemade movies and they all work just fine.  I'm also able to create and read data discs with no problem.   I'm only having trouble playing this one particular DVD movie.   I'm able to play the movie in my PS3 with no problem and can play it in a regular HDMI DVD player.   I'm not sure if my computer doesn't recognize the encoding for the movie or if I need to download another type of software to play the movie.  Someone suggested that i try using PowerDVD to see if it could play the movie. 
    Ok then tell me this what is that DVD your having problem watching then? And what Region Code are you from like Euro is Region 2 and so on??? Could be the Region problem on the DVD doesn't match your drive Region as well?
    I am a Volunteer to help others on here-not a HP employee.
    Replies aren't online 24/7 because of Time Zone differences.
    Remember in this Day and Age of Computing the Internet is Knowledge at your fingertips if you choose understand it. -2015-

  • Get Image Subset VI ignores original image offset

    Hi,
    I'm have a problem with Get Image Subset VI.
    My program gets original image rectangle from a image and apply a offset for draw in a picture control.
    But the image cannot across a region delimited by another rectangle. So, i use Get Image Subset with a
    image (with offset) and a deilimiter rectangle. 
    I give the same subset of image with and without offset.
    Attachments:
    test3.vi ‏12 KB
    servidor_g.png ‏3 KB

    In my opnion the correct result is the highlighted are in the Original Picture With Offset (See attached image ) and not Image Subset.
    Attachments:
    imagem.GIF ‏20 KB

  • Digital watermarking gif images

    I ve writed a program which watermarks png and non-animated gif images .But there is a problem because we started to use animated gif images. How can we watermark animated gif images without corrupting animation of the image?
    Regards
    Murat

    I haven't done much with gif animation, but here's an example that extracts the series of BufferedImages
    from a gif file. Good luck!
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.image.*;
    import java.io.*;
    import java.net.*;
    import java.net.URL;
    import java.util.*;
    import javax.imageio.*;
    import javax.imageio.metadata.*;
    import javax.imageio.stream.*;
    import javax.swing.*;
    import org.w3c.dom.*;
    public class ViewGif extends JPanel {
        private BufferedImage[] images;
        private Point[] offsets;
        private BufferedImage composite;
        public static void main(String[] args) throws IOException {
            JPanel app = new ViewGif();
            app.setBackground(Color.RED);
            JFrame frame = new JFrame("ViewGif");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.getContentPane().add(new JScrollPane(app));
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        public ViewGif() throws IOException {
            URL url = new URL("http://members.aol.com/royalef/sunglass.gif");
            Iterator readers = ImageIO.getImageReadersBySuffix("gif");
            if (!readers.hasNext())
                throw new IOException("no gif readers");
            ImageReader reader = (ImageReader) readers.next();
            if (readers.hasNext())
                System.out.println("(there were oither readers)");
            ImageInputStream iis = ImageIO.createImageInputStream(url.openStream());
            reader.setInput(iis);
            final int numImages = reader.getNumImages(true);
            images = new BufferedImage[numImages];
            offsets = new Point[numImages];
            for(int i=0; i<numImages; ++i) {
                images[i] =  reader.read(i);
                offsets[i] = getPixelOffsets(reader, i);
            composite = new BufferedImage(images[0].getWidth(), images[0].getHeight(),
                BufferedImage.TYPE_INT_ARGB);
            final Graphics2D g2 = composite.createGraphics();
            g2.drawImage(images[0], offsets[0].x, offsets[0].y, null);
            new javax.swing.Timer(100, new ActionListener(){
                int j = 1;
                public void actionPerformed(ActionEvent evt) {
                    g2.drawImage(images[j], offsets[j].x, offsets[j].y, null);
                    j = (j+1) % numImages;
                    repaint();
            }).start();
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Insets insets = getInsets();
            g.drawImage(composite, insets.left, insets.top, null);
        public Dimension getPreferredSize() {
            Insets insets = getInsets();
            int w = insets.left + insets.right + composite.getWidth();
            int h = insets.top + insets.bottom + composite.getHeight();
            return new Dimension(w,h);
        static Point getPixelOffsets(ImageReader reader, int num) throws IOException {
            IIOMetadata meta = reader.getImageMetadata(num);
            Point point = new Point(-1,-1);
            Node root = meta.getAsTree("javax_imageio_1.0");
            for (Node c = root.getFirstChild(); c != null; c = c.getNextSibling()) {
                String name = c.getNodeName();
                if ("Dimension".equals(name)) {
                    for (c = c.getFirstChild(); c != null; c = c.getNextSibling()) {
                        name = c.getNodeName();
                        if ("HorizontalPixelOffset".equals(name))
                            point.x = getValueAttribute(c);
                        else if ("VerticalPixelOffset".equals(name))
                            point.y = getValueAttribute(c);
                    return point;
            return point;
        static int getValueAttribute(Node node) {
            try {
                return Integer.parseInt(node.getAttributes().getNamedItem("value").getNodeValue());
            } catch (NumberFormatException e) {
                return -2;

  • Help needed in rendering images...ThAnkS

    I have 2 classes for rendering images. When i run the application, the images kept flashing, may i know how could i actually have 1 image appearing instead of many images flashing? In other words, i would like in a way similar to mosaic rendering process...Thanks alot
    import javax.swing.ImageIcon;
    import javax.swing.JApplet;
    import javax.swing.JComponent;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Toolkit;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.BufferedInputStream;
    * TumbleItem.java requires these files:
    * SwingWorker.java
    * all the images in the images/tumble directory
    * (or, if specified in the applet tag, another directory [dir]
    * with images named T1.gif ... Tx.gif, where x is the total
    * number of images [nimgs])
    * the appropriate code to specify that the applet be executed,
    * such as the HTML code in TumbleItem.html or TumbleItem.atag,
    * or the JNLP code in TumbleItem.jnlp
    public class TumbleItem extends JApplet
    implements ActionListener {
    int loopslot = -1; //the current frame number
    String dir; //the directory relative to the codebase
    //from which the images are loaded
    javax.swing.Timer timer;
    //the timer animating the images
    int pause; //the length of the pause between revs
    int offset; //how much to offset between loops
    int off; //the current offset
    int speed; //animation speed
    int nimgs; //number of images to animate
    int width; //width of the applet's content pane
    Animator animator; //the applet's content pane
    ImageIcon imgs[]; //the images
    int maxWidth; //width of widest image
    boolean finishedLoading = false;
    JLabel statusLabel;
    static Color[] labelColor = { Color.black, Color.black,
    Color.black, Color.black,
    Color.black, Color.black,
    Color.white, Color.white,
    Color.white, Color.white };
    //Called by init.
    protected void loadAppletParameters() {
    //Get the applet parameters.
    String at = getParameter("img");
    dir = (at != null) ? at : "images/tumble";
    at = getParameter("pause");
    pause = (at != null) ? Integer.valueOf(at).intValue() : 1900;
    at = getParameter("offset");
    offset = (at != null) ? Integer.valueOf(at).intValue() : 0;
    at = getParameter("speed");
    speed = (at != null) ? (1000 / Integer.valueOf(at).intValue()) : 100;
    at = getParameter("nimgs");
    nimgs = (at != null) ? Integer.valueOf(at).intValue() : 16;
    at = getParameter("maxwidth");
    maxWidth = (at != null) ? Integer.valueOf(at).intValue() : 0;
    * Create the GUI. For thread safety, this method should
    * be invoked from the event-dispatching thread.
    private void createGUI() {
    //Animate from right to left if offset is negative.
    width = getSize().width;
    if (offset < 0) {
    off = width - maxWidth;
    //Custom component to draw the current image
    //at a particular offset.
    animator = new Animator();
    animator.setOpaque(true);
    animator.setBackground(Color.white);
    setContentPane(animator);
    //Put a "Loading Images..." label in the middle of
    //the content pane. To center the label's text in
    //the applet, put it in the center part of a
    //BorderLayout-controlled container, and center-align
    //the label's text.
    statusLabel = new JLabel("Loading Images...",
    JLabel.CENTER);
    statusLabel.setForeground(labelColor[0]);
    animator.add(statusLabel, BorderLayout.CENTER);
    //Called when this applet is loaded into the browser.
    public void init() {
    loadAppletParameters();
    //Execute a job on the event-dispatching thread:
    //creating this applet's GUI.
    try {
    javax.swing.SwingUtilities.invokeAndWait(new Runnable() {
    public void run() {
    createGUI();
    } catch (Exception e) {
    System.err.println("createGUI didn't successfully complete");
    //Set up the timer that will perform the animation.
    timer = new javax.swing.Timer(speed, this);
    timer.setInitialDelay(pause);
    timer.setCoalesce(false);
    timer.start(); //Start the animation.
    //Loading the images can take quite a while, so to
    //avoid staying in init() (and thus not being able
    //to show the "Loading Images..." label) we'll
    //load the images in a SwingWorker thread.
    imgs = new ImageIcon[nimgs];
    final SwingWorker worker = new SwingWorker() {
    public Object construct() {
    //Images are numbered 1 to nimgs,
    //but fill array from 0 to nimgs-1.
    for (int i = 0; i < nimgs; i++) {
    imgs[i] = loadImage(i+1);
    finishedLoading = true;
    return imgs;
    //Executes in the event-dispatching thread.
    public void finished() {
    //Remove the "Loading images" label.
    animator.removeAll();
    loopslot = -1;
    worker.start();
    //The component that actually presents the GUI.
    public class Animator extends JPanel {
    public Animator() {
    super(new BorderLayout());
    protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    if (finishedLoading &&
    (loopslot > -1) && (loopslot < nimgs)) {
    if (imgs != null && imgs[loopslot] != null) {
    imgs[loopslot].paintIcon(this, g, off, 0);
    //Update the the loopslot (frame number) and the offset.
    //If it's the last frame, restart the timer to get a long
    //pause between loops.
    public void actionPerformed(ActionEvent e) {
    loopslot++;
    if (!finishedLoading) {
    int colorIndex = loopslot % labelColor.length;
    try {
    statusLabel.setForeground(labelColor[colorIndex]);
    } catch (NullPointerException exc) {}
    return;
    if (loopslot >= nimgs) {
    loopslot = 0;
    off += offset;
    if (off < 0) {
    off = width - maxWidth;
    } else if (off + maxWidth > width) {
    off = 0;
    animator.repaint();
    if (loopslot == nimgs - 1) {
    timer.restart();
    //Called to start the applet's execution.
    public void start() {
    if (finishedLoading && (nimgs > 1)) {
    timer.restart();
    //Called to stop (temporarily or permanently) the applet's execution.
    public void stop() {
    timer.stop();
    protected ImageIcon loadImage(int imageNum) {
    String path = dir + "/Image" + imageNum + ".jpg";
    int MAX_IMAGE_SIZE = 2400; //Change this to the size of
    //your biggest image, in bytes.
    int count = 0;
    BufferedInputStream imgStream = new BufferedInputStream(
    this.getClass().getResourceAsStream(path));
    if (imgStream != null) {
    byte buf[] = new byte[MAX_IMAGE_SIZE];
    try {
    count = imgStream.read(buf);
    imgStream.close();
    } catch (java.io.IOException ioe) {
    System.err.println("Couldn't read stream from file: " + path);
    return null;
    if (count <= 0) {
    System.err.println("Empty file: " + path);
    return null;
    return new ImageIcon(Toolkit.getDefaultToolkit().createImage(buf));
    } else {
    System.err.println("Couldn't find file: " + path);
    return null;
    public String getAppletInfo() {
    return "Title: TumbleItem v1.2, 23 Jul 1997\n"
    + "Author: Interactive Mosaic\n"
    + "A simple Item class to play an image loop.";
    public String[][] getParameterInfo() {
    String[][] info = {
    {"img", "string", "the directory containing the images to loop"},
    {"pause", "int", "pause between complete loops; default is 3900"},
    {"offset", "int", "offset of each image to simulate left (-) or "
    + "right (+) motion; default is 0 (no motion)"},
    {"speed", "int", "the speed at which the frames are looped; "
    + "default is 100"},
    {"nimgs", "int", "the number of images to be looped; default is 16"},
    {"maxwidth", "int", "the maximum width of any image in the loop; "
    + "default is 0"}
    return info;
    import javax.swing.SwingUtilities;
    public abstract class SwingWorker {
    private Object value; // see getValue(), setValue()
    * Class to maintain reference to current worker thread
    * under separate synchronization control.
    private static class ThreadVar {
    private Thread thread;
    ThreadVar(Thread t) { thread = t; }
    synchronized Thread get() { return thread; }
    synchronized void clear() { thread = null; }
    private ThreadVar threadVar;
    * Get the value produced by the worker thread, or null if it
    * hasn't been constructed yet.
    protected synchronized Object getValue() {
    return value;
    * Set the value produced by worker thread
    private synchronized void setValue(Object x) {
    value = x;
    * Compute the value to be returned by the <code>get</code> method.
    public abstract Object construct();
    * Called on the event dispatching thread (not on the worker thread)
    * after the <code>construct</code> method has returned.
    public void finished() {
    * A new method that interrupts the worker thread. Call this method
    * to force the worker to stop what it's doing.
    public void interrupt() {
    Thread t = threadVar.get();
    if (t != null) {
    t.interrupt();
    threadVar.clear();
    * Return the value created by the <code>construct</code> method.
    * Returns null if either the constructing thread or the current
    * thread was interrupted before a value was produced.
    * @return the value created by the <code>construct</code> method
    public Object get() {
    while (true) { 
    Thread t = threadVar.get();
    if (t == null) {
    return getValue();
    try {
    t.join();
    catch (InterruptedException e) {
    Thread.currentThread().interrupt(); // propagate
    return null;
    * Start a thread that will call the <code>construct</code> method
    * and then exit.
    public SwingWorker() {
    final Runnable doFinished = new Runnable() {
    public void run() { finished(); }
    Runnable doConstruct = new Runnable() {
    public void run() {
    try {
    setValue(construct());
    finally {
    threadVar.clear();
    SwingUtilities.invokeLater(doFinished);
    Thread t = new Thread(doConstruct);
    threadVar = new ThreadVar(t);
    * Start the worker thread.
    public void start() {
    Thread t = threadVar.get();
    if (t != null) {
    t.start();
    }

    I have 2 classes for rendering images. When i run the application, the images kept flashing, may i know how could i actually have 1 image appearing instead of many images flashing? In other words, i would like in a way similar to mosaic rendering process...Thanks alot
    import javax.swing.ImageIcon;
    import javax.swing.JApplet;
    import javax.swing.JComponent;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Toolkit;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.BufferedInputStream;
    * TumbleItem.java requires these files:
    * SwingWorker.java
    * all the images in the images/tumble directory
    * (or, if specified in the applet tag, another directory [dir]
    * with images named T1.gif ... Tx.gif, where x is the total
    * number of images [nimgs])
    * the appropriate code to specify that the applet be executed,
    * such as the HTML code in TumbleItem.html or TumbleItem.atag,
    * or the JNLP code in TumbleItem.jnlp
    public class TumbleItem extends JApplet
    implements ActionListener {
    int loopslot = -1; //the current frame number
    String dir; //the directory relative to the codebase
    //from which the images are loaded
    javax.swing.Timer timer;
    //the timer animating the images
    int pause; //the length of the pause between revs
    int offset; //how much to offset between loops
    int off; //the current offset
    int speed; //animation speed
    int nimgs; //number of images to animate
    int width; //width of the applet's content pane
    Animator animator; //the applet's content pane
    ImageIcon imgs[]; //the images
    int maxWidth; //width of widest image
    boolean finishedLoading = false;
    JLabel statusLabel;
    static Color[] labelColor = { Color.black, Color.black,
    Color.black, Color.black,
    Color.black, Color.black,
    Color.white, Color.white,
    Color.white, Color.white };
    //Called by init.
    protected void loadAppletParameters() {
    //Get the applet parameters.
    String at = getParameter("img");
    dir = (at != null) ? at : "images/tumble";
    at = getParameter("pause");
    pause = (at != null) ? Integer.valueOf(at).intValue() : 1900;
    at = getParameter("offset");
    offset = (at != null) ? Integer.valueOf(at).intValue() : 0;
    at = getParameter("speed");
    speed = (at != null) ? (1000 / Integer.valueOf(at).intValue()) : 100;
    at = getParameter("nimgs");
    nimgs = (at != null) ? Integer.valueOf(at).intValue() : 16;
    at = getParameter("maxwidth");
    maxWidth = (at != null) ? Integer.valueOf(at).intValue() : 0;
    * Create the GUI. For thread safety, this method should
    * be invoked from the event-dispatching thread.
    private void createGUI() {
    //Animate from right to left if offset is negative.
    width = getSize().width;
    if (offset < 0) {
    off = width - maxWidth;
    //Custom component to draw the current image
    //at a particular offset.
    animator = new Animator();
    animator.setOpaque(true);
    animator.setBackground(Color.white);
    setContentPane(animator);
    //Put a "Loading Images..." label in the middle of
    //the content pane. To center the label's text in
    //the applet, put it in the center part of a
    //BorderLayout-controlled container, and center-align
    //the label's text.
    statusLabel = new JLabel("Loading Images...",
    JLabel.CENTER);
    statusLabel.setForeground(labelColor[0]);
    animator.add(statusLabel, BorderLayout.CENTER);
    //Called when this applet is loaded into the browser.
    public void init() {
    loadAppletParameters();
    //Execute a job on the event-dispatching thread:
    //creating this applet's GUI.
    try {
    javax.swing.SwingUtilities.invokeAndWait(new Runnable() {
    public void run() {
    createGUI();
    } catch (Exception e) {
    System.err.println("createGUI didn't successfully complete");
    //Set up the timer that will perform the animation.
    timer = new javax.swing.Timer(speed, this);
    timer.setInitialDelay(pause);
    timer.setCoalesce(false);
    timer.start(); //Start the animation.
    //Loading the images can take quite a while, so to
    //avoid staying in init() (and thus not being able
    //to show the "Loading Images..." label) we'll
    //load the images in a SwingWorker thread.
    imgs = new ImageIcon[nimgs];
    final SwingWorker worker = new SwingWorker() {
    public Object construct() {
    //Images are numbered 1 to nimgs,
    //but fill array from 0 to nimgs-1.
    for (int i = 0; i < nimgs; i++) {
    imgs[i] = loadImage(i+1);
    finishedLoading = true;
    return imgs;
    //Executes in the event-dispatching thread.
    public void finished() {
    //Remove the "Loading images" label.
    animator.removeAll();
    loopslot = -1;
    worker.start();
    //The component that actually presents the GUI.
    public class Animator extends JPanel {
    public Animator() {
    super(new BorderLayout());
    protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    if (finishedLoading &&
    (loopslot > -1) && (loopslot < nimgs)) {
    if (imgs != null && imgs[loopslot] != null) {
    imgs[loopslot].paintIcon(this, g, off, 0);
    //Update the the loopslot (frame number) and the offset.
    //If it's the last frame, restart the timer to get a long
    //pause between loops.
    public void actionPerformed(ActionEvent e) {
    loopslot++;
    if (!finishedLoading) {
    int colorIndex = loopslot % labelColor.length;
    try {
    statusLabel.setForeground(labelColor[colorIndex]);
    } catch (NullPointerException exc) {}
    return;
    if (loopslot >= nimgs) {
    loopslot = 0;
    off += offset;
    if (off < 0) {
    off = width - maxWidth;
    } else if (off + maxWidth > width) {
    off = 0;
    animator.repaint();
    if (loopslot == nimgs - 1) {
    timer.restart();
    //Called to start the applet's execution.
    public void start() {
    if (finishedLoading && (nimgs > 1)) {
    timer.restart();
    //Called to stop (temporarily or permanently) the applet's execution.
    public void stop() {
    timer.stop();
    protected ImageIcon loadImage(int imageNum) {
    String path = dir + "/Image" + imageNum + ".jpg";
    int MAX_IMAGE_SIZE = 2400; //Change this to the size of
    //your biggest image, in bytes.
    int count = 0;
    BufferedInputStream imgStream = new BufferedInputStream(
    this.getClass().getResourceAsStream(path));
    if (imgStream != null) {
    byte buf[] = new byte[MAX_IMAGE_SIZE];
    try {
    count = imgStream.read(buf);
    imgStream.close();
    } catch (java.io.IOException ioe) {
    System.err.println("Couldn't read stream from file: " + path);
    return null;
    if (count <= 0) {
    System.err.println("Empty file: " + path);
    return null;
    return new ImageIcon(Toolkit.getDefaultToolkit().createImage(buf));
    } else {
    System.err.println("Couldn't find file: " + path);
    return null;
    public String getAppletInfo() {
    return "Title: TumbleItem v1.2, 23 Jul 1997\n"
    + "Author: Interactive Mosaic\n"
    + "A simple Item class to play an image loop.";
    public String[][] getParameterInfo() {
    String[][] info = {
    {"img", "string", "the directory containing the images to loop"},
    {"pause", "int", "pause between complete loops; default is 3900"},
    {"offset", "int", "offset of each image to simulate left (-) or "
    + "right (+) motion; default is 0 (no motion)"},
    {"speed", "int", "the speed at which the frames are looped; "
    + "default is 100"},
    {"nimgs", "int", "the number of images to be looped; default is 16"},
    {"maxwidth", "int", "the maximum width of any image in the loop; "
    + "default is 0"}
    return info;
    import javax.swing.SwingUtilities;
    public abstract class SwingWorker {
    private Object value; // see getValue(), setValue()
    * Class to maintain reference to current worker thread
    * under separate synchronization control.
    private static class ThreadVar {
    private Thread thread;
    ThreadVar(Thread t) { thread = t; }
    synchronized Thread get() { return thread; }
    synchronized void clear() { thread = null; }
    private ThreadVar threadVar;
    * Get the value produced by the worker thread, or null if it
    * hasn't been constructed yet.
    protected synchronized Object getValue() {
    return value;
    * Set the value produced by worker thread
    private synchronized void setValue(Object x) {
    value = x;
    * Compute the value to be returned by the <code>get</code> method.
    public abstract Object construct();
    * Called on the event dispatching thread (not on the worker thread)
    * after the <code>construct</code> method has returned.
    public void finished() {
    * A new method that interrupts the worker thread. Call this method
    * to force the worker to stop what it's doing.
    public void interrupt() {
    Thread t = threadVar.get();
    if (t != null) {
    t.interrupt();
    threadVar.clear();
    * Return the value created by the <code>construct</code> method.
    * Returns null if either the constructing thread or the current
    * thread was interrupted before a value was produced.
    * @return the value created by the <code>construct</code> method
    public Object get() {
    while (true) { 
    Thread t = threadVar.get();
    if (t == null) {
    return getValue();
    try {
    t.join();
    catch (InterruptedException e) {
    Thread.currentThread().interrupt(); // propagate
    return null;
    * Start a thread that will call the <code>construct</code> method
    * and then exit.
    public SwingWorker() {
    final Runnable doFinished = new Runnable() {
    public void run() { finished(); }
    Runnable doConstruct = new Runnable() {
    public void run() {
    try {
    setValue(construct());
    finally {
    threadVar.clear();
    SwingUtilities.invokeLater(doFinished);
    Thread t = new Thread(doConstruct);
    threadVar = new ThreadVar(t);
    * Start the worker thread.
    public void start() {
    Thread t = threadVar.get();
    if (t != null) {
    t.start();
    }

  • Putting fileinfo data on bottom of image for use in building a photobook for printing/binding

    I wonder if someone on here could help me with a problem I have? I am not a script expert by any means. The term "amateur" is probably pretty accurate!
    I have a few hundred pictures I want to include into a (to be printed) photobook. I want to put some key EXIF/Fileinfo data on the images so that they remind me of what file, when it was taken, with what and with what settings. I found an excellent script (by JJmack?) which does what i want with one exception. The script (below) puts the info on the image starting on the top left (0,0) and I really want it to start on the bottom left (so that it looks like a caption). I have tweaked the original 5 lines of data down to one line, and have reduced the font size but I simply do not have the skills to amend it to add the selected text to the bottom left.
    I was hoping that someone on this forum might be kind enough to help - not least because I am sure there are others who would want to the same thing? Or am I being a complete idiot and there is a simpler way to achieve what I am trying to do?
    Grateful for any help
    Michael.
    Apologies - can't find way to insert file so had to copy and paste:
    // This script was hacked from one I downloaded from the web JJMack 2008
    /*  Script to stamp copyright and camera data of shot   */
    // This script is supplied as is. It is provided as freeware.
    // The author accepts no liability for any problems arising from its use.
    <javascriptresource>
    <about>$$$/JavaScripts/StampExif/About=JJMack's Stamp Exif.^r^rCopyright 2009 Mouseprints.^r^rScript utility for action.^rNOTE:Add Text Layer with Fomatted EXIF Data!</about>
    <category>JJMack's Action Utility</category>
    </javascriptresource>
    // enable double-clicking from Mac Finder or Windows Explorer
    #target photoshop // this command only works in Photoshop CS2 and higher
    // bring application forward for double-click events
    app.bringToFront();
    // ensure at least one document open
    if (!documents.length) {
        alert('There are no documents open.', 'No Document');
    // if at least one document exists, then proceed
    else {
        main();
    // main - main function
    function main() {
        /* Null business owner */
        var Biz = "";
        var Owner = "";
        /* Variables You can hard code your business owner here */
        // var Biz = "Mouseprints";
        // var Owner = "John J McAssey";
            /*  sizeFactor influences text size 1 will use largest font 2 will half that font size    */
        var sizeFactor = 1.5;
            /* textX and TextY positions text placement 0 and 0 Top Left corner of image in pixels    */
        var textX = 0;                                   
        var textY = 0;   
        /* Internal Photoshop Text name                                */                               
            var fontName = "ArialMT";
        var fontName = "TimesNewRomanPSMT";
        var fontName = "Tahoma";
        /* Text Color                                        */
        textColor = new SolidColor;                       
        textColor.rgb.red = 255;
        textColor.rgb.green = 255;
        textColor.rgb.blue = 255;
        /* END Variables You can hard code your business owner here */
            // remember users Ruler avd Type Units and set ours
        var strtRulerUnits = app.preferences.rulerUnits;
        var strtTypeUnits = app.preferences.typeUnits;
        app.preferences.rulerUnits = Units.PIXELS;
         app.preferences.typeUnits = TypeUnits.PIXELS;
        /* Trying to figure out font size for the number of lines to cover the document height        */
        /* and getting setting text area to cover the document was a trip. Adobe Postscript trip    */
        /* I believe that 72 or 72.27 Point/Pica Size Photoshop Preference maybe I should see if    */
        /* I could retrieve it. Anyway mine is set to 72 Setting the document resolution taking        */
        /* the document width and dividing by 72 would probably yield number of characters that        */
        /* would fit in the document width. Setting the documents resolution comes into play        */
        /* with Photoshop text support. Using the documents height and dividing the by the number    */
        /* of lines of text I needed I hoped would yield the font size I needed. However that        */
        /* did not work the text area was correct the number of text lines did not fit. I needed    */
        /* to use a smaller font.  When the document resolution is set to 72 DPI and I set a text    */
        /* layer font size to 72 and the text area the number of pixels I want and observing        */
        /* Photoshop's text options bar there I see a one 1 to one relationship. 72 px = 72 px.        */
        /* If I set the documents resolution lower and set a Photoshop text layer font size to        */
        /* 72 px I see Photoshop scale the number to a lower number of pixels in the option bar.    */
        /* Just what I needed. Setting the Documents resolution to 60 DPI let the number of line    */
        /* I needed fit on the document. However Photoshop also scaled the text area I set down        */
        /* in size and that number of lines did not fit within that area. I needed to scale the        */
        /* text area up. Scaling the Text area up using 72/resolution did the trick...             */
            var testres = 60;
        res = app.activeDocument.resolution;
        if(res!=testres){ app.activeDocument.resizeImage(app.activeDocument.width.value,app.activeDocument.height.v alue,testres); }
        /* Define var to be used to avoid undefined */
        var expTime = "";
        var expPgm = "";
        var expCmp = "";
        var mtrMode = "";
        var ev = "";
        var flshCode = "";
        var flshMode = "";
        var focLength = "";
        var Fstop = "";
        var ISO = "";
        var Model = "";
        var CameraModel = "";
        var Artist = "";
        var maxF = "";
        var wbMode = "";
        var phoTime = "";
        var picYr = "";
        var lens = "";
        var cpyrt = "";
        var remShutter = "";
        var remAperture = "";
        var remISO = "";
        var lat = "";
        var latRef = "";
        var lon = "";
        var lonRef = "";
        var docName = app.activeDocument.name;
        /* END var to be used to avoid undefined */
        try {   // get active document
            var doc = app.activeDocument;
        catch (e){
            alert("No Document Open..." );
        var exifInfo = "";
    try {
            // alert( "doc.info.exif=" + doc.info.exif );
            var numExifItems = doc.info.exif.length;
            // alert( "numExifItems=" + numExifItems );
                    for (var i = 0; i < doc.info.exif.length; i++){
                 exifInfo = exifInfo + doc.info.exif[i][0] + " = " + doc.info.exif[i][1] + "\r";
    /* ---------------------------------- Extracting Data I want to Stamp  formated ----------------------------------------------------------------------- */
                            checkThisItem(doc.info.exif[i][0], doc.info.exif[i][1])
                key=doc.info.exif[i][0];
                keyData=doc.info.exif[i][1];
                if (key == "Artist") {
                    // alert ("Key=" + key + " Data=" + keyData );
                    Artist =("By " + keyData + "  ");
                 if (key == "Date Time Original") {
                    // alert ("Key=" + key + " Data=" + keyData );
                    var phoTime = keyData;
                    var dateArray1 = phoTime.split(" ", 2);
                    phoTime = dateArray1[0];
                    phoHour = dateArray1[1];
                    var dateArray2 = phoTime.split(":");
                    var monthsArray = ["January","February","March","April","May","June","July","August","September","October", "November","December"];
                    phoTime = monthsArray[dateArray2[1]-1]+" " + dateArray2[2]+ ", " + dateArray2[0] +" @ " + phoHour;
                    var picYr = dateArray2[0];
                if (key == "Model") {
                    // alert ("Key=" + key + " Data=" + keyData );
                    Model = (keyData + "  ");
                if (key == "Max Aperture Value") {
                    // alert ("Key=" + key + " Data=" + keyData );
                    maxF = ("maxF " + keyData + " ");
                    maxF = ( keyData + " ");
                if (key == "Focal Length") {
                    // alert ("Key=" + key + " Data=" + keyData );
                    focLength = ("@ " +keyData + "  ");
                if (key == "Exposure Program") {
                    // alert ("Key=" + key + " Data=" + keyData );
                    expPgm = (keyData + "  ");
                    if (expPgm == "Not defined") { expPgm = "Exposure Program Not Recorded  "; }
                if (key == "Exposure Bias Value") {
                    // alert ("Key=" + key + " Data=" + keyData );
                    expCmp = ("Bias " + keyData + "  ");
                if (key == "Metering Mode") {
                    //alert ("Key=" + key + " Data=" + keyData );
                    mtrMode = (keyData + " Metering  ");
                if (key == "White Balance") {
                    // alert ("Key=" + key + " Data=" + keyData );
                    wbMode = ("White Balance " + keyData + "  ");
                if (key == "ISO Speed Ratings") {
                    // alert ("Key=" + key + " Data=" + keyData );
                    ISO = ("ISO " + keyData + "  ");
                    remISO = keyData;
                if (key == "Exposure Time") {
                    // alert ("Key=" + key + " Data=" + keyData );
                    expTime = (" " + keyData + "  ");
                    remShutter = keyData;
                if (key == "F-Stop") {
                    //alert ("Key=" + key + " Data=" + keyData );
                    Fstop = (" " + keyData + "  ");
                    remAperture = keyData;
                if (key == "Flash") {
                    // alert ("Key=" + key + " Data=" + keyData );
                    var flshCode = keyData;
                    var flshMode = "Flash Code=" + flshCode + "  ";
                    if(flshCode==1){var flshMode = "Firing Flash   ";}
                    if(flshCode==9){var flshMode = "Firing Flash   ";}
                    if(flshCode==13){var flshMode = "Firing Flash   ";}
                    if(flshCode==15){var flshMode = "Firing Flash   ";}
                    if(flshCode==25){var flshMode = "Firing Flash   ";}
                    if(flshCode==29){var flshMode = "Firing Flash   ";}
                    if(flshCode==31){var flshMode = "Firing Flash   ";}
                    if(flshCode==65){var flshMode = "Firing Flash   ";}
                    if(flshCode==69){var flshMode = "Firing Flash   ";}
                    if(flshCode==71){var flshMode = "Firing Flash   ";}
                    if(flshCode==73){var flshMode = "Firing Flash   ";}
                    if(flshCode==77){var flshMode = "Firing Flash   ";}
                    if(flshCode==79){var flshMode = "Firing Flash   ";}
                    if(flshCode==89){var flshMode = "Firing Flash   ";}
                    if(flshCode==93){var flshMode = "Firing Flash   ";}
                    if(flshCode==95){var flshMode = "Firing Flash   ";}
                    if(flshCode==0){var flshMode = "without Flash   ";}
                    if(flshCode==16){var flshMode = "without Flash   ";}
                    if(flshCode==24){var flshMode = "without Flash   ";}
                    if(flshCode==88){var flshMode = "without Flash   ";}
                    if(flshCode==32){var flshMode = "No Flash   ";}
                if (key == "GPS Latitude") {
                    //alert ("Key=" + key + " Data=" + keyData );
                    lat= ("Lat: " + keyData.replace(/\.00/g,'') + " ");
                if (key == "GPS Latitude Ref") {
                    //alert ("Key=" + key + " Data=" + keyData );
                    latRef= (keyData + "  ");
                if (key == "GPS Longitude") {
                    //alert ("Key=" + key + " Data=" + keyData );
                    lon= ("Lon: " + keyData.replace(/\.00/g,'') + " ");
                if (key == "GPS Longitude Ref") {
                    //alert ("Key=" + key + " Data=" + keyData );
                    lonRef= (lon + keyData + "  ");
            /* Copyright Year(s) */
            var thisYr, toDay       
            var toDay = new Date();
            var thisYr = toDay.getYear() + 1900;
            if(picYr!="" && thisYr!=""){ var cpyrt =  picYr + "-" + thisYr + "  ";}
            if(picYr=="" && thisYr!=""){ var cpyrt =  thisYr + "  ";}
            if(picYr==thisYr){ var cpyrt =  thisYr + "  ";}
            /* For cameras that don't set Artist or set unknown in the Exif substitute Owner if set */
            if(Artist=="" && Owner!=""){var Artist = "By  " + Owner + "   ";}
            if(Artist=="By unknown  " && Owner!=""){var Artist = "By  " + Owner + "   ";}
            /*  Lens info  */
            xml = app.activeDocument.xmpMetadata.rawData;
            lensOffset = xml.indexOf("<aux:Lens>") + "<aux:Lens>".length;
            if(lensOffset > 0) {
                lens = xml.substr(lensOffset, xml.length - lensOffset);
                lens = lens.substr(0,lens.indexOf("</aux:Lens>"));
            /* Hack for my cameras with fixed lens */
            if(lens=="" && Model=="E990  "){var lens = "9-28mm";}
            if(lens=="" && Model=="E-20,E-20N,E-20P  "){var lens = "9-36mm";}
            if(lens=="" && Model=="E-10  "){var lens = "9-36mm";}
            if(lens=="" && Model=="E-10          "){
                var Model = "E-10  ";
                var lens = "9-36mm";
            if(lens=="" && Model=="Canon PowerShot SD700 IS  "){var lens = "5.8-23.2mm";}
            if(lens!=""){var lens = lens + "  ";}
            else {var lens = "Unknown Lens  ";}
            /* Hack for my ultra compact cameras program mode not recorded */
            if(Model=="Canon PowerShot SD700 IS  "){var expPgm = "Ultra Compact Camera  ";}
            //alert (remShutter + " " + remAperture + " " + remISO);
                    ev = calcEV(remShutter, remAperture, remISO);
    /* ---------------------------------- END Extracting Data I want to Stamp  formated -------------------------------------------------- */
        catch (e){
            alert("No EXIF data exists..." );
        if ( exifInfo == "" ) {
            alert( "No EXIF data exists..." );
        else {
            // alert( "exifInfo=" + exifInfo );
            text_layer = doc.artLayers.add();                        // Add a Layer
            text_layer.name = "EXIF Stamp";                            // Name Layer
            text_layer.kind = LayerKind.TEXT;                        // Make Layer a Text Layer
            text_layer.textItem.color = textColor;                        // set text layer color
    /* Do not set TextType to Pargarph Text for StampEXIF so action can position text layer
             text_layer.textItem.kind = TextType.PARAGRAPHTEXT;                // Set text layers text type
            text_layer.textItem.font = fontName;                        // set text font
            text_layer.blendMode = BlendMode.NORMAL                        // blend mode
            text_layer.textItem.fauxBold = false;                        // Bold
            text_layer.textItem.fauxItalic = false;                        // Italic
            text_layer.textItem.underline = UnderlineType.UNDERLINEOFF;            // Underlibn
            text_layer.textItem.capitalization = TextCase.NORMAL;                // Case
            text_layer.textItem.antiAliasMethod = AntiAlias.SHARP;                // antiAlias
    //        var fontSize = Math.round((doc.height- textY) / ((numExifItems +1) * sizeFactor)); // Calulate font size to use Item nomber + last \r
            /* Calulate font size to use for StampExit keep size same for landscape and portrait base on document size */
            if (doc.width >= doc.height) {var fontSize = Math.round(doc.height / (30 * sizeFactor));}
            else {var fontSize = Math.round(doc.width / (30 * sizeFactor));}
            if (fontSize<10){fontSize=10};                            // don't use Font size smaller then 10
            text_layer.textItem.size = fontSize;                        // set text font Size
    //        text_layer.textItem.position = Array(textX, textY );                // set text layers position in and down
            text_layer.textItem.position = Array(textX, (textY + fontSize ));        // set text layers position in and down for Stamp add in fontsize
            textWidth = ((doc.width - textX) * 72/testres );                // Text width document width - offset
            textHeight = ((doc.height - textY) * 72/testres );                // Text height document height - offset
    /* Do not set Text Area for StampEXIF so action can position text layer
            text_layer.textItem.width = textWidth;                        // set text area width
            text_layer.textItem.height = textHeight;                    // set text area height
             alert(
            "res=" + res + " sizeFactor=" + sizeFactor + " numExifItems=" + numExifItems
            + "\r" + "fontsize=" + fontSize + " font=" +fontName
            + "\r" + "Image area width=" + doc.width + " height=" + doc.height
            + "\r"    + "text area width=" + textWidth + " height=" + textHeight
            + "\r"    + "Text Position top left=" + textX + "," + textY
            + " bottom right=" + (textX + textWidth )+ "," + (textY +  textHeight )
            try{
                text_layer.textItem.contents = exifInfo;
            catch (er) {
                alert("Error Setting Contents...");
    /* -----------------------------------------  Data Stamp  format ----------------------------------------------------------------------- */
            if (!app.activeDocument.info.copyrightNotice=="") {var Notice = app.activeDocument.info.copyrightNotice; }
            else { var Notice = "Copyright \u00A9 " + Biz  + " " + cpyrt; }   
            if (lat!="" && lon!="") { gps = "\r" + lat +latRef + lon + lonRef;}
            else {gps = ""; }
            text_layer.textItem.contents =  docName + " " + Model + lens + ISO + expTime + Fstop;
            if (app.activeDocument.info.instructions == "" ) {
                app.activeDocument.info.instructions = docName + " " + Model  + lens + ISO  + expTime + Fstop;
        if(res != testres){ app.activeDocument.resizeImage(app.activeDocument.width.value,app.activeDocument.height.v alue,res); }
        app.preferences.rulerUnits = strtRulerUnits;
        app.preferences.typeUnits = strtTypeUnits;
    // END - main function
    // calcEV()
    function calcEV(shutter, aperture, iso) {
        evString = new String("");
        isoValue = new Number(0);
        shutterValue = new Number(0);
        apertureValue = new Number(0);
        evValue = new Number(0);
        apertureValue = aperture;
        apertureValue = apertureValue.substr(2,apertureValue.length -2); // Strip off "f/"
        shutterValue = shutter;
        shutterValue = shutterValue.substr(0,shutterValue.indexOf(" ")); // Strip off ending " sec"
        if ( shutterValue.indexOf("/") != -1) {
            topShutter = shutterValue.substr(0,shutterValue.indexOf("/"));
            bottomShutter = shutterValue.substr(shutterValue.indexOf("/") + 1,shutterValue.length -(shutterValue.indexOf("/") + 1));
            shutterValue = topShutter / bottomShutter;
        isoValue = iso;
        //alert ("apertureValue = " + apertureValue +  " shutterValue = " + shutterValue + " isoValue = " + isoValue );
        if (isoValue>0 && shutterValue>0 && apertureValue>0) {
            evValue = Math.LOG2E * Math.log(Math.pow(apertureValue, 2) * (1 / shutterValue) * (100 / isoValue));
            evValue = Math.round(evValue * 10) / 10;
            evString = "EV " + evValue;
        return evString;;
    function checkThisItem(key, keyData) {
        // alert("Key=" + key + " Data=" + keyData );

    I wrote that script to be used within an Action.  The Action uses the script to add the text layer. The text layer becomes the current active layer.  The action can then position the layer anywhere over the document by aligning the layer to a selection.  Also add a layer style like set fill to 0 and adding a drop shadow and emboss. That is the un-expanded step below the set current layer is setting a style and is lengthy.
    Crafting Actions Package UPDATED Aug 10, 2014 Added Conditional Action steps to Action Palette Tips.
    Contains
    Action Actions Palette Tips.txt
    Action Creation Guidelines.txt
    Action Dealing with Image Size.txt
    Action Enhanced via Scripted Photoshop Functions.txt
    CraftedActions.atn Sample Action set includes an example Watermarking action
    Sample Actions.txt Photoshop CraftedActions set saved as a text file.
    More then a dozen Scripts for use in actions
    Example
    Download

  • Best PPI for Creating New Image in Photoshop

    Hi,
    Bunch of questions - all in BOLD. I am somewhat new to CS5 and have been playing around with making art in it. Yesterday I created a piece of art simply by selecting 6 inches by 6 inches in the dialog box (because I was thinking of just printing it out at home and gluing it to a 6 x 6 canvas). It defaulted to 72 ppi / RGB as it always does, and I was fine with that when I started the piece and also because I post these pieces of art to my blog on the web.
    I am in the process of trying to create art for licensing and understand I will have to create things in CMYK for that (right?). I also understand that I should probably create a PS piece at 300 ppi (or is 355 ppi the new standard?)
    I want to create the art on 12 x 12 photoshop windows ("scrapbook size") for manufacturers that will also allow the art to be sampled up and down a little bit (say down to 8 x 8 and up to 20 x 20). Is 300 dpi the best dpi, then, to create the piece at?
    Also, is it possible to re-save the file for the web at 72 dpi / RGB for posting to my blog? What is the best way to do this?
    Final question, I think, is that I will be printing out my art on my own home printer (4-color HP Vivera inks) for trade shows just to show it and am not concerned that it be the absolute-best of all possible prints. Just a pretty good rendition of it for display purposes and I obviously don't want to go through a boatload of ink and spend 20 years waiting for it to come out of the printer, etc. Can anyone recommend the best setting (CMYK? PPI???) for home-printing of 12 x 12's as such?
    Thanks!

    that all of these choices will allow me to save it as a copy?
    When using Image > Image Size I would recommend duplicating the Image (Image > Duplicate) first to avoid the risk of overwriting the original.
    I guess what you are saying is that the manufacturer is able to fiddle with CMYK values that he/she needs and I shouldn't worry about it and just create it in RGB.
    Unless you know what space the actual print will be in you better stay in the larger gamut (as most RGB-spaces are likely to be in relation to most CMYK-spaces).
    And even if you know the target-space working in RGB offers some advantages and avoids the risk of overshooting the allowed Total Area Coverage (as can happen when working in CMYK-files).
    what would be the best way to go about trying to decide what possible CMYK profile I should use, and where in the program would I choose to set it and view it
    • Where do you work (North America, Europe, Asia, …)? In Europe FOGRA sets the standard (ISO Coated v2 for sheet fed offset presses at current for example), in other regions of the world different standards may apply.
    • What is the likely output for your images (Posters, newspapers, magazines, offset or gravure print, t-shirts, …)?
    One can always ask one’s print provider which icc-profile fits their process.
    You can use Photoshop’s soft proofing capabilities to get a preview of whatever color-space you find out to be the pertinent one under
    View > Proof Setup > Custom
    and save that. Then turn View > Proof Colors on or off as needed (command-Y).
    But here (as with separation in general) you may want to look into the various Render Intents.
    Additionally you can use View > Gamut Warning (command-shift-Y).
    can I safely assume when I purchase a scanner and use that in the creation of some work that I should scan things in at 300 ppi?
    300ppi effective resolution that is – this means that if you are likely to upscale an image in a layout program like Indesign or just print it out bigger you should do the scan accordingly bigger or with higher resolution so that in the end 300ppi are maintained for products that are likely to be viewed at or less than an arm’s distance.

  • Component image not getting displayed in Portal

    Hi All,
    I have added a jpg image to MIME folder in my component and used it as source for Image UI and also as a separator in Breadcrumb. When I run this web dynpro application in portal, the image is not getting rendered. I am getting cross mark instead of the image. But the image is getting displayed if I run the application as a stand alone application from SE80 -> Test. Once I do this, the image starts appering even in portal and again disappears after sometime.
    Could you please help me to resolve this issue?
    Thanks & Regards,
    Vishweshwara P.K.M.

    Vishweshwara,
    I hope you referred the MIME object in below way.
    '/sap/bc/webdynpro/sap/ZCOMP_EPI/SELECTED.JPEG'
    Where zcomp_epi is my component name and selected.jpg is mime object name. Check and let me know
    Regards
    Srinvias

Maybe you are looking for

  • Master Detail report in bi publisher 11g

    Hi All, We are using OBIEE 11g (11.1.1.6). How to achive the Master/Detail or Parent/Child reports in BI Publihser reports. Selectiing or Changing a column value in parent report should effect the child report/graph etc.. I understand this can be don

  • App Store says, "Tuner! and 4 other apps could not be downloaded at this time. Please try again later." How may I appease the Store?

    App Store says, "Tuner! and 4 other apps could not be downloaded at this time. Please try again later." How may I appease the Store? The message first appeared a couple of weeks ago and seems to reappear every time I download something from the App S

  • Why is my itunes screen blank?

    Why when I access the itunes store does my screen remain blank?

  • Week Number

    Hello Everyone: I am running Oracle Discoverer Desktop version 9.0.4. In a calculated field, I want to take a "ship date" field and arrive at its corresponding week number. Our company is on a 5-4-4 calendar and every year starts with January 1. For

  • How to assure index is being used for Query

    Hi All, Indexed are best way to speedup the data retrieval process selectively. however i wanted to how to trace that weather index is being used in a particular query. 1. Table tab1 has composite index on a and b. 2. Select a,b,c from tab1 where a>5