From 2a37313b3535f469e86d17241a7852a4ae22f01d Mon Sep 17 00:00:00 2001 From: Pierre-Luc Paour Date: Tue, 4 Nov 2003 03:30:04 +0000 Subject: [PATCH] 2003-11-03 Pierre-Luc Paour (1.2-b13) * Better memory management for thumbnails and previews. Memory errors should be rarer, and thumbnail/preview generation should be quicker. * Added button to sort files alphabetically in an album. * GR should now find jpegtran and ImageMagick in that if they are available in the PATH on non-Windows platforms. Added a long-winded warning at the tail-end of the installer about how to install them. --- ChangeLog | 9 ++ com/gallery/GalleryRemote/GalleryComm2.java | 2 + com/gallery/GalleryRemote/MainFrame.java | 50 +++--- com/gallery/GalleryRemote/PreviewFrame.java | 47 ++++-- com/gallery/GalleryRemote/ThumbnailCache.java | 16 +- com/gallery/GalleryRemote/UploadProgress.java | 1 + com/gallery/GalleryRemote/model/Album.java | 6 + .../resources/GRResources.properties | 6 +- .../GalleryRemote/util/ImageUtils.java | 53 ++++-- .../util/NaturalOrderComparator.java | 153 ++++++++++++++++++ defaults.properties | 4 +- imagemagick/im.properties.preinstalled | 2 +- imagemagick/linux/im.properties | 49 ------ imagemagick/macos/im.properties | 49 ------ imagemagick/solaris/im.properties | 49 ------ 15 files changed, 288 insertions(+), 208 deletions(-) create mode 100644 com/gallery/GalleryRemote/util/NaturalOrderComparator.java delete mode 100644 imagemagick/linux/im.properties delete mode 100644 imagemagick/macos/im.properties delete mode 100644 imagemagick/solaris/im.properties diff --git a/ChangeLog b/ChangeLog index 9fd9a22..05408df 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2003-11-03 Pierre-Luc Paour (1.2-b13) + + * Better memory management for thumbnails and previews. Memory errors + should be rarer, and thumbnail/preview generation should be quicker. + * Added button to sort files alphabetically in an album. + * GR should now find jpegtran and ImageMagick in that if they are + available in the PATH on non-Windows platforms. Added a long-winded + warning at the tail-end of the installer about how to install them. + 2003-10-30 Pierre-Luc Paour (1.2-b12) * Added warning when logging out or quitting and pictures are left in diff --git a/com/gallery/GalleryRemote/GalleryComm2.java b/com/gallery/GalleryRemote/GalleryComm2.java index 8a12cb6..c3740a4 100644 --- a/com/gallery/GalleryRemote/GalleryComm2.java +++ b/com/gallery/GalleryRemote/GalleryComm2.java @@ -530,6 +530,8 @@ public void actionPerformed(ActionEvent e) { GalleryRemote.getInstance().mainFrame.shutdown(true); } } + + GalleryRemote.getInstance().mainFrame.flushMemory(); } else { su.stopProgress(StatusUpdate.LEVEL_UPLOAD_PROGRESS, grRes.getString(MODULE, "upFailed")); } diff --git a/com/gallery/GalleryRemote/MainFrame.java b/com/gallery/GalleryRemote/MainFrame.java index 02281e0..7b26020 100644 --- a/com/gallery/GalleryRemote/MainFrame.java +++ b/com/gallery/GalleryRemote/MainFrame.java @@ -101,6 +101,7 @@ public class MainFrame extends javax.swing.JFrame PictureInspector jPictureInspector = new PictureInspector(); JButton jUploadButton = new JButton(); JButton jBrowseButton = new JButton(); + JButton jSortButton = new JButton(); JMenu jMenuFile = new JMenu(); JMenuItem jMenuItemQuit = new JMenuItem(); JMenuItem jMenuItemSave = new JMenuItem(); @@ -334,6 +335,7 @@ public void run() { && getCurrentAlbum().sizePictures() > 0 && !inProgress && jAlbumCombo.getSelectedIndex() >= 0 ); + jSortButton.setEnabled(jUploadButton.isEnabled()); Gallery currentGallery = getCurrentGallery(); @@ -536,6 +538,14 @@ public void uploadPictures() { } + /** + * Sort the files alphabetically + */ + public void sortPictures() { + getCurrentAlbum().sortPicturesAlphabetically(); + } + + /** * Fetch Albums from server and update UI */ @@ -794,16 +804,19 @@ private void jbInit() jNewAlbumButton.setActionCommand( "NewAlbum" ); jNewAlbumButton.setIcon(iNewAlbum); jPanel3.setLayout( gridLayout1 ); - jUploadButton.setAlignmentX( (float) 2.0 ); + //jUploadButton.setAlignmentX( (float) 2.0 ); jUploadButton.setText( grRes.getString(MODULE, "upldBtnTxt") ); jUploadButton.setActionCommand( "Upload" ); jUploadButton.setToolTipText( grRes.getString(MODULE, "upldBtnTip") ); jInspectorDivider.setBorder( new TitledBorder( BorderFactory.createEtchedBorder( Color.white, new Color( 148, 145, 140 ) ), grRes.getString(MODULE, "inspDvdr") ) ); jPanel1.setBorder( new TitledBorder( BorderFactory.createEtchedBorder( Color.white, new Color( 148, 145, 140 ) ), grRes.getString(MODULE, "panel1")) ); - jBrowseButton.setAlignmentX( (float) 1.0 ); + //jBrowseButton.setAlignmentX( (float) 1.0 ); jBrowseButton.setText( grRes.getString(MODULE, "brwsBtnTxt")); jBrowseButton.setActionCommand( "Browse" ); jBrowseButton.setToolTipText(grRes.getString(MODULE, "brwsBtnTip")); + jSortButton.setText(grRes.getString(MODULE, "sortBtnTxt")); + jSortButton.setActionCommand( "Sort" ); + jSortButton.setToolTipText(grRes.getString(MODULE, "sortBtnTip")); jGalleryCombo.setActionCommand("Url"); jGalleryCombo.setToolTipText(grRes.getString(MODULE, "gllryCombo")); gridLayout1.setHgap( 5 ); @@ -849,6 +862,7 @@ private void jbInit() this.getContentPane().add( jPanel3, new GridBagConstraints( 0, 2, 1, 1, 1.0, 0.0 , GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets( 5, 5, 5, 5 ), 0, 0 ) ); jPanel3.add( jBrowseButton, null ); + jPanel3.add( jSortButton, null); jPanel3.add( jUploadButton, null ); this.getContentPane().add( jStatusBar, new GridBagConstraints( 0, 3, 1, 1, 1.0, 0.0 , GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets( 0, 0, 0, 0 ), 0, 0 ) ); @@ -902,6 +916,7 @@ private void jbInitEvents() { jLoginButton.addActionListener( this ); jNewAlbumButton.addActionListener( this ); jUploadButton.addActionListener( this ); + jSortButton.addActionListener( this ); jBrowseButton.addActionListener( this ); jNewGalleryButton.addActionListener( this ); //jGalleryCombo.addActionListener( this ); @@ -963,13 +978,6 @@ public void actionPerformed( ActionEvent e ) { if (getCurrentGallery().hasComm() && getCurrentGallery().getComm(jStatusBar).isLoggedIn()) { // we're currently logged in: log out getCurrentGallery().logOut(); - //if (getCurrentAlbum() != null) { - // getCurrentAlbum().clearPictures(); - //} - //setCurrentAlbum(null); - - //jAlbumCombo.setModel(new Gallery(this)); - //resetUIState(); } else { // login may have failed and caused getComm to be null. GalleryComm comm = getCurrentGallery().getComm(jStatusBar); @@ -985,25 +993,10 @@ public void actionPerformed( ActionEvent e ) { browseAddPictures(); } else if ( command.equals( "Upload" ) ) { uploadPictures(); + } else if ( command.equals( "Sort" ) ) { + sortPictures(); } else if ( command.equals( "NewGallery" ) ) { showPreferencesDialog(URLPanel.class.getName()); - //} else if ( command.equals( "Url" ) ) { - //Object selectedGallery = jGalleryCombo.getSelectedItem(); - //if (selectedGallery != null) { - //Log.log(Log.TRACE, MODULE, "selected: " + selectedGallery.toString() - // + " (" + jGalleryCombo.getSelectedIndex() + ")"); - - // new url chosen in the popup - // updateGalleryParams(); -// } else { -// Log.log(Log.TRACE, MODULE, "Deselected gallery"); -// } - //} else if ( command.equals( "Album" ) ) { - //Object selectedAlbum = jAlbumCombo.getSelectedItem(); - // Log.log(Log.TRACE, MODULE, "selected: " + selectedAlbum.toString() - // + " (" + jAlbumCombo.getSelectedIndex() + ")"); - - //updatePicturesList( /*(Album) ( (JComboBox) e.getSource() ).getSelectedItem()*/); } else { Log.log(Log.LEVEL_ERROR, MODULE, "Unhandled command " + command ); } @@ -1275,6 +1268,11 @@ private void macOSXRegistration() { } } + public void flushMemory() { + thumbnailCache.flushMemory(); + previewFrame.flushMemory(); + } + /** * Cell renderer * diff --git a/com/gallery/GalleryRemote/PreviewFrame.java b/com/gallery/GalleryRemote/PreviewFrame.java index 0a6fc56..d476b6c 100755 --- a/com/gallery/GalleryRemote/PreviewFrame.java +++ b/com/gallery/GalleryRemote/PreviewFrame.java @@ -28,8 +28,7 @@ import java.awt.Graphics; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; -import java.util.Hashtable; -import java.util.Vector; +import java.util.*; import javax.swing.ImageIcon; @@ -52,7 +51,7 @@ public void initComponents() { addComponentListener(new ComponentAdapter() { public void componentResized(ComponentEvent e) { - imageIcons.clear(); + flushMemory(); } }); @@ -68,6 +67,18 @@ public void paint(Graphics g) { } } + public void hide() { + // release memory if no longer necessary + flushMemory(); + super.hide(); + + displayFile(null); + } + + public void flushMemory() { + imageIcons.clear(); + } + public void displayFile(Picture picture) { if (picture == null) { currentImage = null; @@ -146,8 +157,8 @@ public void loadPreview(String filename) { } - public class SmartHashtable extends Hashtable { - Vector touchOrder = new Vector(); + public class SmartHashtable extends HashMap { + ArrayList touchOrder = new ArrayList(); public Object put(Object key, Object value) { touch(key); @@ -169,9 +180,13 @@ public Object put(Object key, Object value) { } public Object get(Object key) { + return get(key, true); + } + + public Object get(Object key, boolean touch) { Object result = super.get(key); - if (result != null) { + if (result != null && touch) { touch(key); } @@ -179,8 +194,23 @@ public Object get(Object key) { } public void clear() { + Log.log(Log.LEVEL_TRACE, MODULE, Runtime.getRuntime().freeMemory() + " - " + Runtime.getRuntime().totalMemory()); + + // flush images before clearing hastables for quicker deletion + Iterator it = values().iterator(); + while (it.hasNext()) { + ImageIcon i = (ImageIcon) it.next(); + if (i != null) { + i.getImage().flush(); + } + } + super.clear(); touchOrder.clear(); + + Runtime.getRuntime().gc(); + + Log.log(Log.LEVEL_TRACE, MODULE, Runtime.getRuntime().freeMemory() + " - " + Runtime.getRuntime().totalMemory()); } public void touch(Object key) { @@ -201,13 +231,12 @@ public void shrink() { return; } - Object key = touchOrder.elementAt(0); + Object key = touchOrder.get(0); touchOrder.remove(0); - ImageIcon i = (ImageIcon) get(key); + ImageIcon i = (ImageIcon) get(key, false); if (i != null) { i.getImage().flush(); - i = null; } remove(key); diff --git a/com/gallery/GalleryRemote/ThumbnailCache.java b/com/gallery/GalleryRemote/ThumbnailCache.java index c9f03d8..b7483e6 100644 --- a/com/gallery/GalleryRemote/ThumbnailCache.java +++ b/com/gallery/GalleryRemote/ThumbnailCache.java @@ -21,9 +21,7 @@ package com.gallery.GalleryRemote; import java.io.File; -import java.util.Enumeration; -import java.util.Hashtable; -import java.util.Stack; +import java.util.*; import javax.swing.ImageIcon; @@ -45,7 +43,7 @@ public class ThumbnailCache implements Runnable boolean stillRunning = false; Stack toLoad = new Stack(); - Hashtable thumbnails = new Hashtable(); + HashMap thumbnails = new HashMap(); MainFrame mf; @@ -187,6 +185,16 @@ public void reload() { preloadThumbnailFilenames(e); } + public void flushMemory() { + Iterator it = thumbnails.values().iterator(); + while (it.hasNext()) { + ImageIcon i = (ImageIcon) it.next(); + i.getImage().flush(); + } + + thumbnails.clear(); + } + void rerun() { if ( !stillRunning && GalleryRemote.getInstance().properties.getShowThumbnails() ) { diff --git a/com/gallery/GalleryRemote/UploadProgress.java b/com/gallery/GalleryRemote/UploadProgress.java index ab0610f..ec55aaf 100644 --- a/com/gallery/GalleryRemote/UploadProgress.java +++ b/com/gallery/GalleryRemote/UploadProgress.java @@ -139,6 +139,7 @@ public void stopProgress(int level, String message) { } catch (Throwable t) {} if (level == LEVEL_UPLOAD_PROGRESS) { + // we're done... setVisible(false); //dispose(); } diff --git a/com/gallery/GalleryRemote/model/Album.java b/com/gallery/GalleryRemote/model/Album.java index 7e339dd..e9395ac 100644 --- a/com/gallery/GalleryRemote/model/Album.java +++ b/com/gallery/GalleryRemote/model/Album.java @@ -29,6 +29,7 @@ import com.gallery.GalleryRemote.*; import com.gallery.GalleryRemote.util.ImageUtils; import com.gallery.GalleryRemote.util.GRI18n; +import com.gallery.GalleryRemote.util.NaturalOrderComparator; /** * Album model @@ -225,6 +226,11 @@ private void addPictureInternal(int index, Picture p) { } } + public void sortPicturesAlphabetically() { + Collections.sort(pictures, new NaturalOrderComparator()); + notifyListeners(); + } + /** * Number of pictures in the album * diff --git a/com/gallery/GalleryRemote/resources/GRResources.properties b/com/gallery/GalleryRemote/resources/GRResources.properties index 267931c..9a6fcfc 100644 --- a/com/gallery/GalleryRemote/resources/GRResources.properties +++ b/com/gallery/GalleryRemote/resources/GRResources.properties @@ -19,6 +19,8 @@ MainFrame.inspDvdr = Pictures to Upload (Drag and Drop files into this panel) MainFrame.panel1 = Destination Gallery MainFrame.brwsBtnTxt = Add pictures... MainFrame.brwsBtnTip = Find images to add to the currently selected album. This button is disabled, if the currently selected album is read-only or you're not logged in. +MainFrame.sortBtnTxt = Sort pictures... +MainFrame.sortBtnTip = Sort the pictures in the current album alphabetically. MainFrame.gllryCombo = Select a Gallery to which you want to log in MainFrame.menuFile = File MainFrame.menuQuit = Quit @@ -309,8 +311,8 @@ PictInspec.upBtnTip = Move selected picture up PictInspec.upBtn = Move up PictInspec.dnBtnTip = Move selected picture down PictInspec.dnBtn = Move down -PictInspec.delBtnTip = Remove selected picture(s) from the album -PictInspec.Delete = Delete +PictInspec.delBtnTip = Remove selected picture(s) from the album (doesn't delete the file on disk) +PictInspec.Delete = Remove PictInspec.icon = icon PictInspec.rotLtTip = Rotate the selected picture(s) 90° counter-clockwise PictInspec.rotRtTip = Rotate the selected picture(s) 90° clockwise diff --git a/com/gallery/GalleryRemote/util/ImageUtils.java b/com/gallery/GalleryRemote/util/ImageUtils.java index 0389ca8..4b78a75 100644 --- a/com/gallery/GalleryRemote/util/ImageUtils.java +++ b/com/gallery/GalleryRemote/util/ImageUtils.java @@ -108,20 +108,25 @@ public static ImageIcon load( String filename, Dimension d, int usage ) { cmdline.append(" +profile \"*\" "); - File temp = File.createTempFile("thumb", "." + format[usage], tmpDir); - toDelete.add(temp); - - cmdline.append("\"" +temp.getPath() + "\""); - - Log.log(Log.LEVEL_TRACE, MODULE, "Executing " + cmdline.toString()); - - Process p = Runtime.getRuntime().exec(cmdline.toString()); - int exitValue = p.waitFor(); - Log.log(Log.LEVEL_TRACE, MODULE, "Returned with value " + exitValue); - - if (exitValue != 0 && ! imIgnoreErrorCode) { - Log.log(Log.LEVEL_CRITICAL, MODULE, "ImageMagick doesn't seem to be working. Disabling"); - useIM = false; + File temp = deterministicTempFile("thumb", "." + format[usage], tmpDir, filename + d); + + if (! temp.exists()) { + toDelete.add(temp); + + cmdline.append("\"" +temp.getPath() + "\""); + + Log.log(Log.LEVEL_TRACE, MODULE, "Executing " + cmdline.toString()); + + Process p = Runtime.getRuntime().exec(cmdline.toString()); + int exitValue = p.waitFor(); + Log.log(Log.LEVEL_TRACE, MODULE, "Returned with value " + exitValue); + + if (exitValue != 0 && ! imIgnoreErrorCode) { + Log.log(Log.LEVEL_CRITICAL, MODULE, "ImageMagick doesn't seem to be working. Disabling"); + useIM = false; + } else { + r = new ImageIcon(temp.getPath()); + } } else { r = new ImageIcon(temp.getPath()); } @@ -260,7 +265,7 @@ private static File jpegtranExec(String filename, String command) throws IOExcep cmdline.append(" \"").append(filename).append("\""); - r = File.createTempFile("res" + r = File.createTempFile("rot" , "." + GalleryFileFilter.getExtension(filename), tmpDir); toDelete.add(r); @@ -439,7 +444,10 @@ public static void resetExifOrientation(String filename) { imIgnoreErrorCode = p.getBooleanProperty("ignoreErrorCode", imIgnoreErrorCode); Log.log(Log.LEVEL_INFO, MODULE, "imIgnoreErrorCode: " + imIgnoreErrorCode); - if (! new File(imPath).exists()) { + if (imPath.indexOf("/") == -1 && imPath.indexOf("\\") == -1) { + Log.log(Log.LEVEL_CRITICAL, MODULE, "ImageMagick path is not fully qualified, " + + "presence won't be tested until later"); + } else if (! new File(imPath).exists()) { Log.log(Log.LEVEL_CRITICAL, MODULE, "Can't find ImageMagick Convert at the above path"); useIM = false; } @@ -487,7 +495,10 @@ public static void resetExifOrientation(String filename) { jpegtranIgnoreErrorCode = p.getBooleanProperty("ignoreErrorCode", jpegtranIgnoreErrorCode); Log.log(Log.LEVEL_INFO, MODULE, "jpegtranIgnoreErrorCode: " + jpegtranIgnoreErrorCode); - if (! new File(jpegtranPath).exists()) { + if (jpegtranPath.indexOf("/") == -1 && jpegtranPath.indexOf("\\") == -1) { + Log.log(Log.LEVEL_CRITICAL, MODULE, "jpegtran path is not fully qualified, " + + "presence won't be tested until later"); + } if (! new File(jpegtranPath).exists()) { Log.log(Log.LEVEL_CRITICAL, MODULE, "Can't find jpegtran at the above path"); useJpegtran = false; } @@ -552,4 +563,12 @@ public AngleFlip(int angle, boolean flip) { this.flip = flip; } } + + public static File deterministicTempFile(String prefix, String suffix, File directory, String hash) { + if (directory == null) { + directory = new File(System.getProperty("java.io.tmpdir")); + } + + return new File(directory, prefix + hash.hashCode() + suffix); + } } diff --git a/com/gallery/GalleryRemote/util/NaturalOrderComparator.java b/com/gallery/GalleryRemote/util/NaturalOrderComparator.java new file mode 100644 index 0000000..2940663 --- /dev/null +++ b/com/gallery/GalleryRemote/util/NaturalOrderComparator.java @@ -0,0 +1,153 @@ +package com.gallery.GalleryRemote.util; + +/* +NaturalOrderComparator.java -- Perform 'natural order' comparisons of strings in Java. +Copyright (C) 2003 by Pierre-Luc Paour + +Based on the C version by Martin Pool, of which this is more or less a straight conversion. +Copyright (C) 2000 by Martin Pool + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not +claim that you wrote the original software. If you use this software +in a product, an acknowledgment in the product documentation would be +appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be +misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +*/ + +import java.util.*; + +public class NaturalOrderComparator implements Comparator { + int compareRight(String a, String b) + { + int bias = 0; + int ia = 0; + int ib = 0; + + // The longest run of digits wins. That aside, the greatest + // value wins, but we can't know that it will until we've scanned + // both numbers to know that they have the same magnitude, so we + // remember it in BIAS. + for (;; ia++, ib++) { + char ca = charAt(a, ia); + char cb = charAt(b, ib); + + if (!Character.isDigit(ca) + && !Character.isDigit(cb)) { + return bias; + } else if (!Character.isDigit(ca)) { + return -1; + } else if (!Character.isDigit(cb)) { + return +1; + } else if (ca < cb) { + if (bias == 0) { + bias = -1; + } + } else if (ca > cb) { + if (bias == 0) + bias = +1; + } else if (ca == 0 && cb == 0) { + return bias; + } + } + } + + public int compare(Object o1, Object o2) { + String a = o1.toString(); + String b = o2.toString(); + + int ia = 0, ib = 0; + int nza = 0, nzb = 0; + char ca, cb; + int result; + + while (true) { + // only count the number of zeroes leading the last number compared + nza = nzb = 0; + + ca = charAt(a, ia); cb = charAt(b, ib); + + // skip over leading spaces or zeros + while (Character.isSpaceChar(ca) || ca == '0') { + if (ca == '0') { + nza++; + } else { + // only count consecutive zeroes + nza = 0; + } + + ca = charAt(a, ++ia); + } + + while (Character.isSpaceChar(cb) || cb == '0') { + if (cb == '0') { + nzb++; + } else { + // only count consecutive zeroes + nzb = 0; + } + + cb = charAt(b, ++ib); + } + + // process run of digits + if (Character.isDigit(ca) && Character.isDigit(cb)) { + if ((result = compareRight(a.substring(ia), b.substring(ib))) != 0) { + return result; + } + } + + if (ca == 0 && cb == 0) { + // The strings compare the same. Perhaps the caller + // will want to call strcmp to break the tie. + return nza - nzb; + } + + if (ca < cb) { + return -1; + } else if (ca > cb) { + return +1; + } + + ++ia; ++ib; + } + } + + static char charAt(String s, int i) { + if (i >= s.length()) { + return 0; + } else { + return s.charAt(i); + } + } + + public static void main(String[] args) { + String[] strings = new String[] {"1-2", "1-02", "1-20", "10-20", "fred", "jane", + "pic01", "pic2", "pic02", "pic02a", "pic3", "pic4", + "pic 4 else", "pic 5", "pic05", "pic 5", "pic 5 something", + "pic 6", "pic 7", "pic100", "pic100a", "pic120", "pic121", + "pic02000", "tom", "x2-g8", "x2-y7", "x2-y08", "x8-y8"}; + + List orig = Arrays.asList(strings); + + System.out.println("Original: " + orig); + + List scrambled = Arrays.asList(strings); + Collections.shuffle(scrambled); + + System.out.println("Scrambled: " + scrambled); + + Collections.sort(scrambled, new NaturalOrderComparator()); + + System.out.println("Sorted: " + scrambled); + } +} diff --git a/defaults.properties b/defaults.properties index 271b39a..f633be3 100644 --- a/defaults.properties +++ b/defaults.properties @@ -127,6 +127,6 @@ classpath=GalleryRemote.jar;lib/JSX1.0.7.4.jar;lib/metadata-extractor-2.1.jar;la # # --- Do not edit below this line --- # -version=1.2-b12 -releaseDate=2003/10/30 +version=1.2-b13 +releaseDate=2003/11/03 aboutText=Gallery Remote\n \n \nA part of the Gallery Open-Source Project\nhttp://gallery.sourceforge.net\n \n \nMaintained by:\n \nPierre-Luc Paour\nAmedeo Paglione\nChris Schwerdt\n \n \nInitial version by Chris Smith\n \n \nContributors:\n \nTim Miller\nDolan Halbrook\nMarkus Cozowicz\n \n \nArtwork by Ross A. Reyman\n \n \nBundled software:\n \nImageMagick\nJSX\nJava look and feel Graphics Repository icons\njpegtran, Guido Vollbeding's version\nMetadataExtractor diff --git a/imagemagick/im.properties.preinstalled b/imagemagick/im.properties.preinstalled index 72682e4..d008e98 100644 --- a/imagemagick/im.properties.preinstalled +++ b/imagemagick/im.properties.preinstalled @@ -2,7 +2,7 @@ enabled=true # path to the convert executable installed with ImageMagick -imConvertPath=imagemagick/win32/convert.exe +imConvertPath=convert # Filters # Point diff --git a/imagemagick/linux/im.properties b/imagemagick/linux/im.properties deleted file mode 100644 index 25d4230..0000000 --- a/imagemagick/linux/im.properties +++ /dev/null @@ -1,49 +0,0 @@ -# should ImageMagick support be enabled? -enabled=true - -# path to the convert executable installed with ImageMagick -imConvertPath=imagemagick/linux/convert - -# Filters -# Point -# Box -# Triangle -# Hermite -# Hanning -# Hamming -# Blackman -# Gaussian -# Quadratic -# Cubic -# Catrom -# Mitchell -# Lanczos Default -# Bessel -# Sinc - -# filter used for resize of thumbnails -imThumbnailResizeFilter=Box - -# filter used for resize of preview -imPreviewResizeFilter=Lanczos - -# filter used for resize of upload -imUploadResizeFilter=Lanczos - -# Formats -# jpg Better for large images -# gif Better for small images (8-bit) - -# filter used for resize of thumbnails -imThumbnailResizeFormat=gif - -# filter used for resize of preview -imPreviewResizeFormat=jpg - -# jpeg quality -jpegQuality=80 - -# ignore error code sent back by the executable -# there's a bug in the Linux Java VM that returns a failed code -# even when the executable sends back a success code... -ignoreErrorCode=true \ No newline at end of file diff --git a/imagemagick/macos/im.properties b/imagemagick/macos/im.properties deleted file mode 100644 index c7a6dec..0000000 --- a/imagemagick/macos/im.properties +++ /dev/null @@ -1,49 +0,0 @@ -# should ImageMagick support be enabled? -enabled=true - -# path to the convert executable installed with ImageMagick -imConvertPath=imagemagick/macos/convert - -# Filters -# Point -# Box -# Triangle -# Hermite -# Hanning -# Hamming -# Blackman -# Gaussian -# Quadratic -# Cubic -# Catrom -# Mitchell -# Lanczos Default -# Bessel -# Sinc - -# filter used for resize of thumbnails -imThumbnailResizeFilter=Box - -# filter used for resize of preview -imPreviewResizeFilter=Lanczos - -# filter used for resize of upload -imUploadResizeFilter=Lanczos - -# Formats -# jpg Better for large images -# gif Better for small images (8-bit) - -# filter used for resize of thumbnails -imThumbnailResizeFormat=gif - -# filter used for resize of preview -imPreviewResizeFormat=jpg - -# jpeg quality -jpegQuality=80 - -# ignore error code sent back by the executable -# there's a bug in the Linux Java VM that returns a failed code -# even when the executable sends back a success code... -ignoreErrorCode=false \ No newline at end of file diff --git a/imagemagick/solaris/im.properties b/imagemagick/solaris/im.properties deleted file mode 100644 index 46d7073..0000000 --- a/imagemagick/solaris/im.properties +++ /dev/null @@ -1,49 +0,0 @@ -# should ImageMagick support be enabled? -enabled=true - -# path to the convert executable installed with ImageMagick -imConvertPath=imagemagick/solaris/convert - -# Filters -# Point -# Box -# Triangle -# Hermite -# Hanning -# Hamming -# Blackman -# Gaussian -# Quadratic -# Cubic -# Catrom -# Mitchell -# Lanczos Default -# Bessel -# Sinc - -# filter used for resize of thumbnails -imThumbnailResizeFilter=Box - -# filter used for resize of preview -imPreviewResizeFilter=Lanczos - -# filter used for resize of upload -imUploadResizeFilter=Lanczos - -# Formats -# jpg Better for large images -# gif Better for small images (8-bit) - -# filter used for resize of thumbnails -imThumbnailResizeFormat=gif - -# filter used for resize of preview -imPreviewResizeFormat=jpg - -# jpeg quality -jpegQuality=80 - -# ignore error code sent back by the executable -# there's a bug in the Linux Java VM that returns a failed code -# even when the executable sends back a success code... -ignoreErrorCode=false \ No newline at end of file