Added quality option to image thumbnailer

This commit is contained in:
Jaex 2019-01-02 11:58:31 +03:00
parent 469fc29b87
commit 09cd2e62fd
5 changed files with 178 additions and 54 deletions

View file

@ -397,7 +397,7 @@
</data>
<data name="btnPingPrimary.Text" xml:space="preserve">
<value>Ping</value>
<comment>@Invariant</comment></data>
</data>
<data name="&gt;&gt;btnPingPrimary.Name" xml:space="preserve">
<value>btnPingPrimary</value>
</data>
@ -421,7 +421,7 @@
</data>
<data name="btnPingSecondary.Text" xml:space="preserve">
<value>Ping</value>
<comment>@Invariant</comment></data>
</data>
<data name="&gt;&gt;btnPingSecondary.Name" xml:space="preserve">
<value>btnPingSecondary</value>
</data>
@ -448,7 +448,7 @@
<value>CenterScreen</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>ShareX - DNS Changer</value>
<value>ShareX - DNS changer</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>DNSChangerForm</value>

View file

@ -142,11 +142,6 @@ public static Image ResizeImage(Image img, int width, int height, bool allowEnla
public static Image CreateThumbnail(Image img, int width, int height)
{
if (img.Width == width && img.Height == height)
{
return img;
}
double srcRatio = (double)img.Width / img.Height;
double dstRatio = (double)width / height;
int w, h;
@ -185,7 +180,6 @@ public static Image CreateThumbnail(Image img, int width, int height)
bmp.SetResolution(img.HorizontalResolution, img.VerticalResolution);
using (Graphics g = Graphics.FromImage(bmp))
using (img)
{
g.SetHighQuality();
g.DrawImage(img, new Rectangle(0, 0, width, height), new Rectangle(x, y, w, h), GraphicsUnit.Pixel);

View file

@ -43,8 +43,12 @@ private void InitializeComponent()
this.lblOutputFolder = new System.Windows.Forms.Label();
this.txtOutputFolder = new System.Windows.Forms.TextBox();
this.btnOutputFolder = new System.Windows.Forms.Button();
this.lblQuality = new System.Windows.Forms.Label();
this.nudQuality = new System.Windows.Forms.NumericUpDown();
this.lblQualityPercentage = new System.Windows.Forms.Label();
((System.ComponentModel.ISupportInitialize)(this.nudWidth)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nudHeight)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nudQuality)).BeginInit();
this.SuspendLayout();
//
// lvImages
@ -60,6 +64,7 @@ private void InitializeComponent()
this.lvImages.Name = "lvImages";
this.lvImages.UseCompatibleStateImageBehavior = false;
this.lvImages.View = System.Windows.Forms.View.Details;
this.lvImages.SelectedIndexChanged += new System.EventHandler(this.lvImages_SelectedIndexChanged);
this.lvImages.DragDrop += new System.Windows.Forms.DragEventHandler(this.lvImages_DragDrop);
this.lvImages.DragEnter += new System.Windows.Forms.DragEventHandler(this.lvImages_DragEnter);
//
@ -117,7 +122,7 @@ private void InitializeComponent()
0,
0,
0});
this.nudHeight.ValueChanged += new System.EventHandler(this.nudWidth_ValueChanged);
this.nudHeight.ValueChanged += new System.EventHandler(this.nudHeight_ValueChanged);
//
// lblOutputFilename
//
@ -155,11 +160,34 @@ private void InitializeComponent()
this.btnOutputFolder.UseVisualStyleBackColor = true;
this.btnOutputFolder.Click += new System.EventHandler(this.btnOutputFolder_Click);
//
// lblQuality
//
resources.ApplyResources(this.lblQuality, "lblQuality");
this.lblQuality.Name = "lblQuality";
//
// nudQuality
//
resources.ApplyResources(this.nudQuality, "nudQuality");
this.nudQuality.Name = "nudQuality";
this.nudQuality.Value = new decimal(new int[] {
90,
0,
0,
0});
//
// lblQualityPercentage
//
resources.ApplyResources(this.lblQualityPercentage, "lblQualityPercentage");
this.lblQualityPercentage.Name = "lblQualityPercentage";
//
// ImageThumbnailerForm
//
this.AcceptButton = this.btnGenerate;
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.lblQualityPercentage);
this.Controls.Add(this.nudQuality);
this.Controls.Add(this.lblQuality);
this.Controls.Add(this.btnOutputFolder);
this.Controls.Add(this.txtOutputFolder);
this.Controls.Add(this.lblOutputFolder);
@ -178,6 +206,7 @@ private void InitializeComponent()
this.Name = "ImageThumbnailerForm";
((System.ComponentModel.ISupportInitialize)(this.nudWidth)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nudHeight)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nudQuality)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
@ -199,5 +228,8 @@ private void InitializeComponent()
private System.Windows.Forms.Label lblOutputFolder;
private System.Windows.Forms.TextBox txtOutputFolder;
private System.Windows.Forms.Button btnOutputFolder;
private System.Windows.Forms.Label lblQuality;
private System.Windows.Forms.NumericUpDown nudQuality;
private System.Windows.Forms.Label lblQualityPercentage;
}
}

View file

@ -39,27 +39,24 @@ public ImageThumbnailerForm()
Icon = ShareXResources.Icon;
}
private void CheckState()
private void UpdateEnabled()
{
btnRemove.Enabled = lvImages.SelectedItems.Count > 0;
btnGenerate.Enabled = lvImages.Items.Count > 0 && nudWidth.Value > 0 && nudHeight.Value > 0 && !string.IsNullOrEmpty(txtOutputFolder.Text) &&
!string.IsNullOrEmpty(txtOutputFilename.Text);
}
private void AddFile(string filePath)
{
if (string.IsNullOrEmpty(filePath))
if (!string.IsNullOrEmpty(filePath))
{
return;
lvImages.Items.Add(filePath);
if (string.IsNullOrEmpty(txtOutputFolder.Text))
{
txtOutputFolder.Text = Path.GetDirectoryName(filePath);
}
}
lvImages.Items.Add(filePath);
if (string.IsNullOrEmpty(txtOutputFolder.Text))
{
txtOutputFolder.Text = Path.GetDirectoryName(filePath);
}
CheckState();
}
private void btnAdd_Click(object sender, EventArgs e)
@ -72,6 +69,8 @@ private void btnAdd_Click(object sender, EventArgs e)
{
AddFile(image);
}
UpdateEnabled();
}
}
@ -86,6 +85,11 @@ private void btnRemove_Click(object sender, EventArgs e)
}
}
private void lvImages_SelectedIndexChanged(object sender, EventArgs e)
{
UpdateEnabled();
}
private void lvImages_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop, false))
@ -110,18 +114,25 @@ private void lvImages_DragDrop(object sender, DragEventArgs e)
{
AddFile(file);
}
UpdateEnabled();
}
}
}
private void nudWidth_ValueChanged(object sender, EventArgs e)
{
CheckState();
UpdateEnabled();
}
private void nudHeight_ValueChanged(object sender, EventArgs e)
{
UpdateEnabled();
}
private void txtOutputFolder_TextChanged(object sender, EventArgs e)
{
CheckState();
UpdateEnabled();
}
private void btnOutputFolder_Click(object sender, EventArgs e)
@ -131,7 +142,7 @@ private void btnOutputFolder_Click(object sender, EventArgs e)
private void txtOutputFilename_TextChanged(object sender, EventArgs e)
{
CheckState();
UpdateEnabled();
}
private void btnGenerate_Click(object sender, EventArgs e)
@ -140,9 +151,12 @@ private void btnGenerate_Click(object sender, EventArgs e)
{
int width = (int)nudWidth.Value;
int height = (int)nudHeight.Value;
int quality = (int)nudQuality.Value;
string outputFolder = txtOutputFolder.Text;
string outputFilename = txtOutputFilename.Text;
Cursor = Cursors.WaitCursor;
try
{
foreach (ListViewItem lvi in lvImages.Items)
@ -151,16 +165,17 @@ private void btnGenerate_Click(object sender, EventArgs e)
if (File.Exists(filePath))
{
Image img = ImageHelpers.LoadImage(filePath);
if (img != null)
using (Image img = ImageHelpers.LoadImage(filePath))
{
using (img = ImageHelpers.CreateThumbnail(img, width, height))
if (img != null)
{
string filename = Path.GetFileNameWithoutExtension(filePath);
string outputPath = Path.Combine(outputFolder, outputFilename.Replace("$filename", filename));
outputPath = Path.ChangeExtension(outputPath, "jpg");
img.SaveJPG(outputPath, 90);
using (Image thumbnail = ImageHelpers.CreateThumbnail(img, width, height))
{
string filename = Path.GetFileNameWithoutExtension(filePath);
string outputPath = Path.Combine(outputFolder, outputFilename.Replace("$filename", filename));
outputPath = Path.ChangeExtension(outputPath, "jpg");
thumbnail.SaveJPG(outputPath, quality);
}
}
}
}
@ -171,6 +186,10 @@ private void btnGenerate_Click(object sender, EventArgs e)
DebugHelper.WriteException(ex);
ex.ShowError();
}
finally
{
Cursor = Cursors.Default;
}
}
}
}

View file

@ -132,19 +132,19 @@
<value>lvImages</value>
</data>
<data name="&gt;&gt;lvImages.Type" xml:space="preserve">
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=12.4.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;lvImages.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;lvImages.ZOrder" xml:space="preserve">
<value>12</value>
<value>15</value>
</data>
<data name="btnAdd.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 8</value>
</data>
<data name="btnAdd.Size" type="System.Drawing.Size, System.Drawing">
<value>168, 24</value>
<value>152, 24</value>
</data>
<data name="btnAdd.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
@ -162,13 +162,16 @@
<value>$this</value>
</data>
<data name="&gt;&gt;btnAdd.ZOrder" xml:space="preserve">
<value>11</value>
<value>14</value>
</data>
<data name="btnRemove.Enabled" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="btnRemove.Location" type="System.Drawing.Point, System.Drawing">
<value>184, 8</value>
<value>168, 8</value>
</data>
<data name="btnRemove.Size" type="System.Drawing.Size, System.Drawing">
<value>168, 23</value>
<value>152, 24</value>
</data>
<data name="btnRemove.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
@ -186,13 +189,13 @@
<value>$this</value>
</data>
<data name="&gt;&gt;btnRemove.ZOrder" xml:space="preserve">
<value>10</value>
<value>13</value>
</data>
<data name="lblWidth.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblWidth.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 416</value>
<value>5, 416</value>
</data>
<data name="lblWidth.Size" type="System.Drawing.Size, System.Drawing">
<value>38, 13</value>
@ -213,7 +216,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;lblWidth.ZOrder" xml:space="preserve">
<value>9</value>
<value>12</value>
</data>
<data name="nudWidth.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 432</value>
@ -238,13 +241,13 @@
<value>$this</value>
</data>
<data name="&gt;&gt;nudWidth.ZOrder" xml:space="preserve">
<value>8</value>
<value>11</value>
</data>
<data name="lblHeight.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblHeight.Location" type="System.Drawing.Point, System.Drawing">
<value>104, 416</value>
<value>101, 416</value>
</data>
<data name="lblHeight.Size" type="System.Drawing.Size, System.Drawing">
<value>41, 13</value>
@ -265,7 +268,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;lblHeight.ZOrder" xml:space="preserve">
<value>7</value>
<value>10</value>
</data>
<data name="nudHeight.Location" type="System.Drawing.Point, System.Drawing">
<value>104, 432</value>
@ -289,7 +292,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;nudHeight.ZOrder" xml:space="preserve">
<value>6</value>
<value>9</value>
</data>
<data name="lblOutputFilename.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -316,7 +319,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;lblOutputFilename.ZOrder" xml:space="preserve">
<value>5</value>
<value>8</value>
</data>
<data name="txtOutputFilename.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 528</value>
@ -329,7 +332,6 @@
</data>
<data name="txtOutputFilename.Text" xml:space="preserve">
<value>$filename_th</value>
<comment>@Invariant</comment>
</data>
<data name="&gt;&gt;txtOutputFilename.Name" xml:space="preserve">
<value>txtOutputFilename</value>
@ -341,7 +343,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;txtOutputFilename.ZOrder" xml:space="preserve">
<value>4</value>
<value>7</value>
</data>
<data name="btnGenerate.Enabled" type="System.Boolean, mscorlib">
<value>False</value>
@ -350,7 +352,7 @@
<value>8, 560</value>
</data>
<data name="btnGenerate.Size" type="System.Drawing.Size, System.Drawing">
<value>560, 23</value>
<value>560, 24</value>
</data>
<data name="btnGenerate.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
@ -368,7 +370,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;btnGenerate.ZOrder" xml:space="preserve">
<value>3</value>
<value>6</value>
</data>
<data name="lblOutputFolder.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -395,7 +397,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;lblOutputFolder.ZOrder" xml:space="preserve">
<value>2</value>
<value>5</value>
</data>
<data name="txtOutputFolder.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 480</value>
@ -416,7 +418,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;txtOutputFolder.ZOrder" xml:space="preserve">
<value>1</value>
<value>4</value>
</data>
<data name="btnOutputFolder.Location" type="System.Drawing.Point, System.Drawing">
<value>536, 479</value>
@ -429,7 +431,6 @@
</data>
<data name="btnOutputFolder.Text" xml:space="preserve">
<value>...</value>
<comment>@Invariant</comment>
</data>
<data name="&gt;&gt;btnOutputFolder.Name" xml:space="preserve">
<value>btnOutputFolder</value>
@ -441,6 +442,84 @@
<value>$this</value>
</data>
<data name="&gt;&gt;btnOutputFolder.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="lblQuality.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblQuality.Location" type="System.Drawing.Point, System.Drawing">
<value>197, 416</value>
</data>
<data name="lblQuality.Size" type="System.Drawing.Size, System.Drawing">
<value>42, 13</value>
</data>
<data name="lblQuality.TabIndex" type="System.Int32, mscorlib">
<value>15</value>
</data>
<data name="lblQuality.Text" xml:space="preserve">
<value>Quality:</value>
</data>
<data name="&gt;&gt;lblQuality.Name" xml:space="preserve">
<value>lblQuality</value>
</data>
<data name="&gt;&gt;lblQuality.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lblQuality.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;lblQuality.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="nudQuality.Location" type="System.Drawing.Point, System.Drawing">
<value>200, 432</value>
</data>
<data name="nudQuality.Size" type="System.Drawing.Size, System.Drawing">
<value>56, 20</value>
</data>
<data name="nudQuality.TabIndex" type="System.Int32, mscorlib">
<value>16</value>
</data>
<data name="nudQuality.TextAlign" type="System.Windows.Forms.HorizontalAlignment, System.Windows.Forms">
<value>Center</value>
</data>
<data name="&gt;&gt;nudQuality.Name" xml:space="preserve">
<value>nudQuality</value>
</data>
<data name="&gt;&gt;nudQuality.Type" xml:space="preserve">
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;nudQuality.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;nudQuality.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="lblQualityPercentage.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblQualityPercentage.Location" type="System.Drawing.Point, System.Drawing">
<value>261, 436</value>
</data>
<data name="lblQualityPercentage.Size" type="System.Drawing.Size, System.Drawing">
<value>15, 13</value>
</data>
<data name="lblQualityPercentage.TabIndex" type="System.Int32, mscorlib">
<value>17</value>
</data>
<data name="lblQualityPercentage.Text" xml:space="preserve">
<value>%</value>
</data>
<data name="&gt;&gt;lblQualityPercentage.Name" xml:space="preserve">
<value>lblQualityPercentage</value>
</data>
<data name="&gt;&gt;lblQualityPercentage.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lblQualityPercentage.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;lblQualityPercentage.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">