ImageMagick Engine - Version 1.6.0

Version Description

  • Small bug fixes
  • Small updates to admin UI
Download this release

Release Info

Developer rickardw
Plugin Icon 128x128 ImageMagick Engine
Version 1.6.0
Comparing to
See all releases

Code changes from version 1.5.6 to 1.6.0

css/ime-admin.css CHANGED
@@ -18,16 +18,31 @@
18
  width: 60px;
19
  }
20
 
21
- #regenbar {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
  position: relative;
23
- height: 22px;
24
- border-radius: 0 0 5px 5px;
25
- -moz-border-radius: 0 0 5px 5px;
26
- -webkit-border-radius: 0 0 5px 5px;
27
- -khtml-border-radius: 0 0 5px 5px;
 
28
  }
29
 
30
- #regenbar-percent {
31
  position: absolute;
32
  left: 50%;
33
  top: 50%;
@@ -39,61 +54,19 @@
39
  text-align: center;
40
  }
41
 
42
- #regenbar.ui-progressbar {
43
  background-color: #eee;
44
  color: #000;
45
  height: 30px;
46
  }
47
 
48
- .ime-dialog .ui-widget-overlay {
49
- background: #000;
50
- opacity: 0.6;
51
- position: absolute;
52
- left: 0;
53
- top: 0;
54
- }
55
-
56
- .ime-dialog.ui-dialog {
57
  border-radius: 5px;
58
  -moz-border-radius: 5px;
59
  -webkit-border-radius: 5px;
60
  -khtml-border-radius: 5px;
61
- background: #111;
62
- box-shadow: 0 0 10px #444;
63
- -moz-box-shadow: 0 0 10px #444;
64
- -webkit-box-shadow: 0 0 10px #444;
65
- }
66
-
67
- .ime-dialog .ui-dialog-titlebar {
68
- height: 20px;
69
- line-height: 20px;
70
- color: #ccc;
71
- font-size: 10px;
72
- padding-left: 5px;
73
- }
74
-
75
- .ime-dialog .ui-dialog-titlebar .ui-dialog-titlebar-close {
76
- float: right;
77
- color: #fff;
78
- text-decoration: none;
79
- padding-right: 5px;
80
- }
81
-
82
- #regenerate-images-metabox .ajax-feedback {
83
- margin-bottom: 5px;
84
- }
85
-
86
- .ime-dialog .ui-dialog-titlebar .ui-dialog-titlebar-close:hover {
87
- color: #ff6600;
88
- }
89
-
90
- #regenbar.ui-progressbar .ui-progressbar-value {
91
- height: 22px;
92
- background: url(../images/pbar-ani.gif) #FF6600;
93
- border-radius: 0 0 5px 5px;
94
- -moz-border-radius: 0 0 5px 5px;
95
- -webkit-border-radius: 0 0 5px 5px;
96
- -khtml-border-radius: 0 0 5px 5px;
97
  }
98
 
99
  .ime-regen-button {
18
  width: 60px;
19
  }
20
 
21
+ #ime-regeneration {
22
+ display: none;
23
+ margin: 30px 0;
24
+ }
25
+
26
+ #ime-regeneration.working {
27
+ display: block;
28
+ }
29
+
30
+ .form-table td p.ime-description {
31
+ color: #666;
32
+ font-size: 12px;
33
+ }
34
+
35
+ #ime-regenbar {
36
  position: relative;
37
+ border-radius: 5px;
38
+ -moz-border-radius: 5px;
39
+ -webkit-border-radius: 5px;
40
+ -khtml-border-radius: 5px;
41
+ border: 1px solid #666;
42
+ padding: 1px;
43
  }
44
 
45
+ #ime-regenbar-percent {
46
  position: absolute;
47
  left: 50%;
48
  top: 50%;
54
  text-align: center;
55
  }
56
 
57
+ #ime-regenbar.ui-progressbar {
58
  background-color: #eee;
59
  color: #000;
60
  height: 30px;
61
  }
62
 
63
+ #ime-regenbar.ui-progressbar .ui-progressbar-value {
64
+ height: 30px;
65
+ background: #FF6600;
 
 
 
 
 
 
66
  border-radius: 5px;
67
  -moz-border-radius: 5px;
68
  -webkit-border-radius: 5px;
69
  -khtml-border-radius: 5px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  }
71
 
72
  .ime-regen-button {
imagemagick-engine.php CHANGED
@@ -5,10 +5,10 @@
5
  Description: Improve the quality of re-sized images by replacing standard GD library with ImageMagick
6
  Author: Orangelab
7
  Author URI: https://orangelab.com/
8
- Version: 1.5.4
9
  Text Domain: imagemagick-engine
10
 
11
- Copyright 2010, 2011, 2012, 2013, 2014, 2015 Brand Manual Sweden AB
12
 
13
  Licenced under the GNU GPL:
14
 
@@ -46,7 +46,7 @@ $ime_options_default = array('enabled' => false
46
  , 'handle_sizes' => array('thumbnail' => 'size', 'medium' => 'quality', 'large' => 'quality')
47
  , 'quality' => array('quality' => -1, 'size' => 70)
48
  , 'quality' => ''
49
- , 'version' => IME_OPTION_VERSION
50
  );
51
 
52
  // Available modes
@@ -91,20 +91,8 @@ function ime_init() {
91
  add_action('wp_ajax_ime_test_im_path', 'ime_ajax_test_im_path');
92
  add_action('wp_ajax_ime_process_image', 'ime_ajax_process_image');
93
  add_action('wp_ajax_ime_regeneration_get_images','ime_ajax_regeneration_get_images');
94
-
95
- // Do we have a WP native version of progressbar?
96
- if (!wp_script_is('jquery-ui-progressbar', 'registered')) {
97
- /*
98
- * jQuery UI version 1.7 and 1.8 seems incompatible...
99
- */
100
- if (ime_script_version_compare('jquery-ui-core', '1.8', '>=')) {
101
- wp_register_script('jquery-ui-progressbar', plugins_url('/js/ui.progressbar-1.8.9.js', __FILE__), array('jquery-ui-core', 'jquery-ui-widget'), '1.8.9');
102
- } else {
103
- wp_register_script('jquery-ui-progressbar', plugins_url('/js/ui.progressbar-1.7.2.js', __FILE__), array('jquery-ui-core'), '1.7.2');
104
- }
105
- }
106
 
107
- wp_register_script('ime-admin', plugins_url('/js/ime-admin.js', __FILE__), array('jquery', 'jquery-ui-dialog', 'jquery-ui-progressbar'));
108
  }
109
  }
110
 
@@ -172,13 +160,13 @@ function ime_setup_options() {
172
 
173
  // Do we need to upgrade options?
174
  if (!array_key_exists('version', $ime_options)
175
- || $ime_options['version'] < IME_OPTION_VERSION) {
176
 
177
  /*
178
  * Future compatability code goes here!
179
  */
180
 
181
- $ime_options['version'] = IME_OPTION_VERSION;
182
  ime_store_options();
183
  }
184
  }
@@ -203,13 +191,13 @@ function ime_get_option($option_name, $default = null) {
203
 
204
  global $ime_options, $ime_options_default;
205
 
206
- if (array_key_exists($option_name, $ime_options))
207
  return $ime_options[$option_name];
208
 
209
  if (!is_null($default))
210
  return $default;
211
 
212
- if (array_key_exists($option_name, $ime_options_default))
213
  return $ime_options_default[$option_name];
214
 
215
  return null;
@@ -934,6 +922,13 @@ function ime_option_page() {
934
  <div class="wrap">
935
  <div id="regen-message" class="hidden updated fade"></div>
936
  <h2><?php _e('ImageMagick Engine Settings','imagemagick-engine'); ?></h2>
 
 
 
 
 
 
 
937
  <form action="options-general.php?page=imagemagick-engine" method="post" name="update_options">
938
  <?php wp_nonce_field('ime-options'); ?>
939
  <div id="poststuff" class="metabox-holder has-right-sidebar">
@@ -961,16 +956,9 @@ function ime_option_page() {
961
  if (!ime_active())
962
  echo '<p class="howto">' . __('Resize will use standard WordPress functions.', 'imagemagick-engine') . '</p>';
963
  ?>
964
- <p><input class="button-primary" type="button" id="regenerate-images" value="<?php _e('Regenerate', 'imagemagick-engine'); ?>" /> <img alt="" title="" class="ajax-feedback" src="<?php echo ime_option_admin_images_url(); ?>wpspin_light.gif" style="visibility: hidden;"> <?php _e('(this can take a long time)', 'imagemagick-engine'); ?></p>
965
- </div>
966
- <div class="hidden">
967
- <div id="regeneration" title="<?php _e('Regenerating images', 'imagemagick-engine'); ?>...">
968
- <noscript><p><em><?php _e( 'You must enable Javascript in order to proceed!', 'imagemagick-engine' ) ?></em></p></noscript>
969
- <div id="regenbar">
970
- <div id="regenbar-percent"></div>
971
- </div>
972
  </div>
973
- </div>
974
  </div>
975
  </div>
976
  </div>
@@ -1022,11 +1010,9 @@ function ime_option_page() {
1022
  <tr>
1023
  <th scope="row" valign="top"><?php _e('ImageMagick quality','imagemagick-engine'); ?>:</th>
1024
  <td>
1025
- <input id="quality-quality" type="text" name="quality-quality" size="3" value="<?php echo ( ( isset( $quality[ 'quality' ] ) && $quality[ 'quality' ] > 0 ) ? $quality[ 'quality' ] : '' ); ?>" /> <?php _e( 'Optimize for quality','imagemagick-engine' ); ?><br />
1026
- <input id="quality-size" type="text" name="quality-size" size="3" value="<?php echo ( ( isset( $quality[ 'size' ] ) && $quality[ 'size' ] > 0 ) ? $quality[ 'size' ] : '' ); ?>" /> <?php _e( 'Optimize for size','imagemagick-engine' ); ?><br />
1027
- <p class="ime-description">
1028
- <?php _e( 'Set to 0-100. Higher value gives better image quality but larger file size. Leave empty for default value, computed dynamically.', 'imagemagick-engine' ); ?>
1029
- </p>
1030
  </td>
1031
  </tr>
1032
  <tr>
5
  Description: Improve the quality of re-sized images by replacing standard GD library with ImageMagick
6
  Author: Orangelab
7
  Author URI: https://orangelab.com/
8
+ Version: 1.6.0
9
  Text Domain: imagemagick-engine
10
 
11
+ Copyright @ 2020 Orangelab AB
12
 
13
  Licenced under the GNU GPL:
14
 
46
  , 'handle_sizes' => array('thumbnail' => 'size', 'medium' => 'quality', 'large' => 'quality')
47
  , 'quality' => array('quality' => -1, 'size' => 70)
48
  , 'quality' => ''
49
+ , 'version' => constant('IME_OPTION_VERSION')
50
  );
51
 
52
  // Available modes
91
  add_action('wp_ajax_ime_test_im_path', 'ime_ajax_test_im_path');
92
  add_action('wp_ajax_ime_process_image', 'ime_ajax_process_image');
93
  add_action('wp_ajax_ime_regeneration_get_images','ime_ajax_regeneration_get_images');
 
 
 
 
 
 
 
 
 
 
 
 
94
 
95
+ wp_register_script('ime-admin', plugins_url('/js/ime-admin.js', __FILE__), array('jquery', 'jquery-ui-progressbar'));
96
  }
97
  }
98
 
160
 
161
  // Do we need to upgrade options?
162
  if (!array_key_exists('version', $ime_options)
163
+ || $ime_options['version'] < constant('IME_OPTION_VERSION')) {
164
 
165
  /*
166
  * Future compatability code goes here!
167
  */
168
 
169
+ $ime_options['version'] = constant('IME_OPTION_VERSION');
170
  ime_store_options();
171
  }
172
  }
191
 
192
  global $ime_options, $ime_options_default;
193
 
194
+ if (is_array($ime_options) && array_key_exists($option_name, $ime_options))
195
  return $ime_options[$option_name];
196
 
197
  if (!is_null($default))
198
  return $default;
199
 
200
+ if (is_array($ime_options_default) && array_key_exists($option_name, $ime_options_default))
201
  return $ime_options_default[$option_name];
202
 
203
  return null;
922
  <div class="wrap">
923
  <div id="regen-message" class="hidden updated fade"></div>
924
  <h2><?php _e('ImageMagick Engine Settings','imagemagick-engine'); ?></h2>
925
+ <div id="ime-regeneration" title="<?php _e('Regenerating images', 'imagemagick-engine'); ?>...">
926
+ <noscript><p><em><?php _e( 'You must enable Javascript in order to proceed!', 'imagemagick-engine' ) ?></em></p></noscript>
927
+ <p><strong><?php _e('Regenerating images', 'imagemagick-engine'); ?>...</strong></p>
928
+ <div id="ime-regenbar">
929
+ <div id="ime-regenbar-percent"></div>
930
+ </div>
931
+ </div>
932
  <form action="options-general.php?page=imagemagick-engine" method="post" name="update_options">
933
  <?php wp_nonce_field('ime-options'); ?>
934
  <div id="poststuff" class="metabox-holder has-right-sidebar">
956
  if (!ime_active())
957
  echo '<p class="howto">' . __('Resize will use standard WordPress functions.', 'imagemagick-engine') . '</p>';
958
  ?>
959
+ <p><input class="button-primary" type="button" id="regenerate-images" value="<?php _e('Regenerate', 'imagemagick-engine'); ?>" /></p>
960
+ <p class="description"><?php _e('(this can take a long time)', 'imagemagick-engine'); ?></p>
 
 
 
 
 
 
961
  </div>
 
962
  </div>
963
  </div>
964
  </div>
1010
  <tr>
1011
  <th scope="row" valign="top"><?php _e('ImageMagick quality','imagemagick-engine'); ?>:</th>
1012
  <td>
1013
+ <p><input id="quality-quality" type="text" name="quality-quality" size="3" value="<?php echo ( ( isset( $quality[ 'quality' ] ) && $quality[ 'quality' ] > 0 ) ? $quality[ 'quality' ] : '' ); ?>" /> <?php _e( 'Optimize for quality','imagemagick-engine' ); ?></p>
1014
+ <p><input id="quality-size" type="text" name="quality-size" size="3" value="<?php echo ( ( isset( $quality[ 'size' ] ) && $quality[ 'size' ] > 0 ) ? $quality[ 'size' ] : '' ); ?>" /> <?php _e( 'Optimize for size','imagemagick-engine' ); ?></p>
1015
+ <p class="ime-description"><?php _e( 'Set to 0-100. Higher value gives better image quality but larger file size. Leave empty for default value, computed dynamically.', 'imagemagick-engine' ); ?></p>
 
 
1016
  </td>
1017
  </tr>
1018
  <tr>
js/ime-admin.js CHANGED
@@ -54,9 +54,9 @@ function imeStartResize() {
54
  var rt_percent = 0;
55
 
56
  rt_count = 1;
57
- jQuery("#regenbar").progressbar();
58
- jQuery("#regenbar-percent").html( rt_percent.toFixed(rt_precision) + " %" );
59
- jQuery('#regeneration').dialog( { 'dialogClass': 'ime-dialog' } ).dialog( 'open' );
60
 
61
  imeRegenImages( rt_images.shift() );
62
  }
@@ -73,15 +73,15 @@ function imeRegenImages( id ) {
73
 
74
  if ( rt_images.length <= 0 ) {
75
  jQuery('#regen-message').removeClass('hidden').html("<p><strong>" + ime_admin.done + "</strong> " + ime_admin.processed_fmt.replace('%d', rt_total) + ".</p>");
76
- jQuery('#regeneration').dialog('close');
77
- jQuery("#regenbar").progressbar( "value", 0 );
78
  return;
79
  }
80
 
81
  var next_id = rt_images.shift();
82
  var rt_percent = ( rt_count / rt_total ) * 100;
83
- jQuery("#regenbar").progressbar( "value", rt_percent );
84
- jQuery("#regenbar-percent").html( rt_percent.toFixed(rt_precision) + " %" );
85
  rt_count = rt_count + 1;
86
 
87
  // tail recursion
@@ -134,28 +134,18 @@ jQuery(document).ready(function($) {
134
  imeUpdateMode();
135
  jQuery('#ime-select-mode').change(imeUpdateMode);
136
 
137
- $('#regeneration').dialog({
138
- height: 42,
139
- minHeight: 42,
140
- closeText: 'X',
141
- width: '75%',
142
- modal: true,
143
- autoOpen: false
144
- });
145
-
146
  $('#regenerate-images').click(function(){
147
- $('#regenerate-images-metabox img.ajax-feedback').css('visibility','visible');
148
- $.post(ajaxurl, { action: "ime_regeneration_get_images" }, function(data) {
149
- jQuery('#regen-message').addClass('hidden');
150
- $('#regenerate-images-metabox img.ajax-feedback').css('visibility','hidden');
151
- rt_images = data.split(",");
152
- rt_total = rt_images.length;
153
-
154
- if(rt_total > 0) {
155
- imeStartResize();
156
- } else {
157
- alert(ime_admin.noimg);
158
- }
159
- });
160
  });
161
  });
54
  var rt_percent = 0;
55
 
56
  rt_count = 1;
57
+ jQuery("#ime-regenbar").progressbar();
58
+ jQuery("#ime-regenbar-percent").html( rt_percent.toFixed(rt_precision) + " %" );
59
+ jQuery('#ime-regeneration').addClass( 'working' );
60
 
61
  imeRegenImages( rt_images.shift() );
62
  }
73
 
74
  if ( rt_images.length <= 0 ) {
75
  jQuery('#regen-message').removeClass('hidden').html("<p><strong>" + ime_admin.done + "</strong> " + ime_admin.processed_fmt.replace('%d', rt_total) + ".</p>");
76
+ jQuery('#ime-regeneration').removeClass('working');
77
+ jQuery("#ime-regenbar").progressbar( "value", 0 );
78
  return;
79
  }
80
 
81
  var next_id = rt_images.shift();
82
  var rt_percent = ( rt_count / rt_total ) * 100;
83
+ jQuery("#ime-regenbar").progressbar( "value", rt_percent );
84
+ jQuery("#ime-regenbar-percent").html( rt_percent.toFixed(rt_precision) + " %" );
85
  rt_count = rt_count + 1;
86
 
87
  // tail recursion
134
  imeUpdateMode();
135
  jQuery('#ime-select-mode').change(imeUpdateMode);
136
 
 
 
 
 
 
 
 
 
 
137
  $('#regenerate-images').click(function(){
138
+ $('#regenerate-images-metabox img.ajax-feedback').show();
139
+ $.post(ajaxurl, { action: "ime_regeneration_get_images" }, function(data) {
140
+ jQuery('#regen-message').addClass('hidden');
141
+ rt_images = data.split(",");
142
+ rt_total = rt_images.length;
143
+
144
+ if(rt_total > 0) {
145
+ imeStartResize();
146
+ } else {
147
+ alert(ime_admin.noimg);
148
+ }
149
+ });
 
150
  });
151
  });
js/ui.progressbar-1.7.2.js DELETED
@@ -1,13 +0,0 @@
1
- /*
2
- * jQuery UI Progressbar 1.7.2
3
- *
4
- * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5
- * Dual licensed under the MIT (MIT-LICENSE.txt)
6
- * and GPL (GPL-LICENSE.txt) licenses.
7
- *
8
- * http://docs.jquery.com/UI/Progressbar
9
- *
10
- * Depends:
11
- * ui.core.js
12
- */
13
- (function(a){a.widget("ui.progressbar",{_init:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this._valueMin(),"aria-valuemax":this._valueMax(),"aria-valuenow":this._value()});this.valueDiv=a('<div class="ui-progressbar-value ui-widget-header ui-corner-left"></div>').appendTo(this.element);this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow").removeData("progressbar").unbind(".progressbar");this.valueDiv.remove();a.widget.prototype.destroy.apply(this,arguments)},value:function(b){if(b===undefined){return this._value()}this._setData("value",b);return this},_setData:function(b,c){switch(b){case"value":this.options.value=c;this._refreshValue();this._trigger("change",null,{});break}a.widget.prototype._setData.apply(this,arguments)},_value:function(){var b=this.options.value;if(b<this._valueMin()){b=this._valueMin()}if(b>this._valueMax()){b=this._valueMax()}return b},_valueMin:function(){var b=0;return b},_valueMax:function(){var b=100;return b},_refreshValue:function(){var b=this.value();this.valueDiv[b==this._valueMax()?"addClass":"removeClass"]("ui-corner-right");this.valueDiv.width(b+"%");this.element.attr("aria-valuenow",b)}});a.extend(a.ui.progressbar,{version:"1.7.2",defaults:{value:0}})})(jQuery);;
 
 
 
 
 
 
 
 
 
 
 
 
 
js/ui.progressbar-1.8.9.js DELETED
@@ -1,16 +0,0 @@
1
- /*
2
- * jQuery UI Progressbar 1.8.9
3
- *
4
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
5
- * Dual licensed under the MIT or GPL Version 2 licenses.
6
- * http://jquery.org/license
7
- *
8
- * http://docs.jquery.com/UI/Progressbar
9
- *
10
- * Depends:
11
- * jquery.ui.core.js
12
- * jquery.ui.widget.js
13
- */
14
- (function(b,d){b.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=b("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow");
15
- this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===d)return this._value();this._setOption("value",a);return this},_setOption:function(a,c){if(a==="value"){this.options.value=c;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*
16
- this._value()/this.options.max},_refreshValue:function(){var a=this.value(),c=this._percentage();if(this.oldValue!==a){this.oldValue=a;this._trigger("change")}this.valueDiv.toggleClass("ui-corner-right",a===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.9"})})(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
readme.txt CHANGED
@@ -1,9 +1,9 @@
1
  === ImageMagick Engine ===
2
  Contributors: rickardw, orangelab
3
  Tags: image, images, picture, imagemagick, gd
4
- Requires at least: 2.9
5
  Tested up to: 5.3.2
6
- Stable tag: 1.5.5
7
 
8
  Improve the quality of re-sized images by replacing standard GD library with ImageMagick.
9
 
@@ -74,6 +74,10 @@ You'll probably have problems with various other plugins too unless you fix this
74
 
75
  == Changelog ==
76
 
 
 
 
 
77
  = 1.5.4 =
78
  * Fixed a bug that could cause transparency errors with PNG
79
 
1
  === ImageMagick Engine ===
2
  Contributors: rickardw, orangelab
3
  Tags: image, images, picture, imagemagick, gd
4
+ Requires at least: 3.0
5
  Tested up to: 5.3.2
6
+ Stable tag: 1.6.0
7
 
8
  Improve the quality of re-sized images by replacing standard GD library with ImageMagick.
9
 
74
 
75
  == Changelog ==
76
 
77
+ = 1.6.0 =
78
+ * Small bug fixes
79
+ * Small updates to admin UI
80
+
81
  = 1.5.4 =
82
  * Fixed a bug that could cause transparency errors with PNG
83