国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

超簡易圖種生成器

2019-11-14 15:52:18
字體:
來源:轉載
供稿:網友

前幾天逛知乎,看到一個問題:“有沒有一段代碼,讓你覺得人類的智慧也可以璀璨無比?”。作為一個渣渣程序猿自然就好奇的點進去看了。

嗯。。結果就是什么都看不懂。感覺全是大牛,各種腦洞。我看了簡直就是各種驚奇,心想:臥槽居然還能這樣玩兒。

 

往下翻了好久,看到了一個比較好玩的,說讓下載圖片,改后綴為rar可以打開。其實這個把戲幾年前就見到過了。貼吧里有時候有人發內涵圖的時候就這么干過,把種子放到壓縮文件,然后放進圖片里。

不過那會兒完完全全的小白,啥都不懂,只是覺得挺好玩的,挺好奇怎么弄的,不過也沒有去搜這個原理。(太懶了。。。)

看到這我才看了一下是怎么弄的,其實原來就只是一句cmd命令而已:

copy /b a.jpg+b.rar c.jpg

其實就是表示把一個RAR文件拼到一張圖片的末尾,生成一個新的圖片文件。其實不用rar也可以把其他文件壓縮進圖片里,只不過生成新的圖片之后,改后綴名會打不開文件,提示文件已損壞。一般都是用壓縮文件格式的。

回答里還看到答主還說了一句 “當年還有小伙伴寫成了界面程序…找不到了。” 

 

想想覺得這個應該挺簡單的,無非就是獲取一個圖片路徑,加上一個壓縮文件的路徑,然后保存生成新的圖片嘛。反正當時也無聊,就做著玩一下。。

于是乎,就有了下面這個界面。。。

WinForm在大二的時候學過一點兒,之后就再也沒用過了,到現在兩年多了。

想著是點這兩個文本框,彈出文件選擇的窗口。兩個都選好后點生成,就彈出要保存文件的窗口,選擇地址,輸入文件名保存就完了。

說實話在學校還真沒有學過這幾個控件,或許是學過,不過一直沒用過就給忘了吧。嘿嘿嘿...

不管了,打開工具箱一個個看,看著哪個順眼,感覺是的就拖過來試試。然就有了這幾個控件:

分別給兩個TextBox添加Click事件。讓它們彈出文件選擇的窗口,記得篩選一下文件類型

我在textBox1_Click事件里寫上 openFileDialog1.ShowDialog(); 后,發現彈出窗體 選擇文件之后,文本框還是什么都沒有,看來還得自己手動賦值了

        PRivate void textBox1_Click(object sender, EventArgs e)        {            //彈出文件選擇窗口            openFileDialog1.ShowDialog();            //獲得文件名,包含全路徑            string filePath = openFileDialog1.FileName;            if (!string.IsNullOrEmpty(filePath.Trim()))            {                //判斷是否是圖片文件,防止修改文件后綴名等操作                bool rs = IsImage(filePath);                if (rs)                {                    //將選中文件的文件名顯示到TextBox中                    txtImg.Text = filePath;                }                else                {                    MessageBox.Show("_(:з」∠)_這不是真的圖片文件哦!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);                }            }        }

這里 IsImage(filePath) 是判斷了一下選擇的文件到底是不是圖片文件。防止別人修改文件后綴名上傳。主要就這一句:

System.Drawing.Image img = System.Drawing.Image.FromFile(path);

這會把文件試著轉換成Image圖片,如果這一句不報錯,說明就是圖片文件。

 

現在已經可以獲得要壓縮的圖片 和文件地址了,下一步就是獲取用戶要保存的新圖片的地址了。

在“生成”按鈕的點擊事件里面,首先得判斷圖片、和文件的路徑是否為空,已經路徑文件是否真的存在。

這些判斷通過之后,就彈出文件另存為的窗口,同樣的,也是用 saveFileDialog1.FileName 就能獲取到用戶輸入文件名之后的文件全路徑了。

現在好了,三個都能獲取到了。可是接下來的問題來了...   要怎么用程序去調用cmd 并運行這條命令呢??這個我之前也是沒有接觸過的。。好吧,只好找度娘了。于是就有了下面這段代碼:

 1 private void RunCMD(string cmd) 2 { 3     System.Diagnostics.Process p = new System.Diagnostics.Process(); 4     p.StartInfo.FileName = "cmd.exe"; 5     p.StartInfo.UseShellExecute = false;    //是否使用操作系統shell啟動 6     p.StartInfo.RedirectStandardInput = true;//接受來自調用程序的輸入信息 7     p.StartInfo.RedirectStandardOutput = true;//由調用程序獲取輸出信息 8     p.StartInfo.RedirectStandardError = true;//重定向標準錯誤輸出 9     p.StartInfo.CreateNoWindow = true;//不顯示程序窗口10     p.Start();//啟動程序11 12     //向cmd窗口發送輸入信息13     p.StandardInput.WriteLine(cmd + "&exit");14 15     p.StandardInput.AutoFlush = true;16     //p.StandardInput.WriteLine("exit");17     //向標準輸入寫入要執行的命令。這里使用&是批處理命令的符號,表示前面一個命令不管是否執行成功都執行后面(exit)命令,如果不執行exit命令,后面調用ReadToEnd()方法會假死18     //同類的符號還有&&和||前者表示必須前一個命令執行成功才會執行后面的命令,后者表示必須前一個命令執行失敗才會執行后面的命令19 20             21     //獲取cmd窗口的輸出信息22     string output = p.StandardOutput.ReadToEnd();23     p.WaitForExit();//等待程序執行完退出進程24     p.Close();25 }

萬能的百度哇。。 到這應該就可以搞定了吧。

 

下面奉上全部代碼:

  1 using System;  2 using System.Diagnostics;  3 using System.IO;  4 using System.Text;  5 using System.Windows.Forms;  6 using System.Windows.Forms.VisualStyles;  7   8 namespace ImageRar  9 { 10     public partial class Form1 : Form 11     { 12         public Form1() 13         { 14             InitializeComponent(); 15         } 16          17         private void textBox1_Click(object sender, EventArgs e) 18         { 19             //選擇圖片 20             openFileDialog1.ShowDialog(); 21             //獲得文件名,包含全路徑 22             string filePath = openFileDialog1.FileName; 23  24             if (!string.IsNullOrEmpty(filePath.Trim())) 25             { 26                 //判斷是否是圖片文件,防止修改文件后綴名等操作 27                 bool rs = IsImage(filePath); 28  29                 if (rs) 30                 { 31                     //將選中文件的文件名顯示到TextBox中 32                     txtImg.Text = filePath; 33                 } 34                 else 35                 { 36                     MessageBox.Show("_(:з」∠)_這不是真的圖片文件哦!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); 37                 } 38             } 39         } 40  41         /// <summary> 42         /// 判斷文件是否為圖片 43         /// </summary> 44         /// <param name="path">文件的完整路徑</param> 45         /// <returns>返回結果</returns> 46         public bool IsImage(string path) 47         { 48             try 49             { 50                 System.Drawing.Image img = System.Drawing.Image.FromFile(path); 51                 return true; 52             } 53             catch (Exception) 54             { 55                 return false; 56             } 57         } 58  59         private void textBox2_Click(object sender, EventArgs e) 60         { 61             //選擇壓縮文件 62             openFileDialog2.ShowDialog(); 63             //獲得文件名,包含全路徑 64             string filePath = openFileDialog2.FileName; 65             //將選中文件的文件名顯示到TextBox中 66             txtFile.Text = filePath; 67  68         } 69          70         private void button1_Click(object sender, EventArgs e) 71         { 72             string path1 = txtImg.Text.Trim(); 73             string path2 = txtFile.Text.Trim(); 74  75             //判斷是否為空 76             if (string.IsNullOrEmpty(path1)) 77             { 78                 MessageBox.Show("(,,•? . •?,,)請先選擇一張圖片", "Oops!", MessageBoxButtons.OK, MessageBoxIcon.Warning); 79                 return; 80             } 81             else if (string.IsNullOrEmpty(path2)) 82             { 83                 MessageBox.Show("(,,•? . •?,,)請選擇你要放進圖片里的壓縮文件", "Oops!", MessageBoxButtons.OK, MessageBoxIcon.Warning); 84                 return; 85             } 86             //判斷文件是否存在 87             bool flag = true; 88             if (!File.Exists(path1)) 89             { 90                 flag = false; 91                 MessageBox.Show("ヽ(o`皿′o)?圖片路徑不正確!", "Oops!", MessageBoxButtons.OK, MessageBoxIcon.Warning); 92             } 93             if (!File.Exists(path2)) 94             { 95                 flag = false; 96                 MessageBox.Show("ヽ(o`皿′o)?壓縮文件路徑不正確!", "Oops!", MessageBoxButtons.OK, MessageBoxIcon.Warning); 97             } 98             if (flag) 99             {100                 //彈出文件保存窗口101                 saveFileDialog1.ShowDialog();102                 //獲得用戶新命名的圖片文件全路徑103                 string newFileName = saveFileDialog1.FileName;104                 105                 // 文件壓縮命令 eg: copy /b test.jpg+1.rar test2.jpg106                 StringBuilder cmd = new StringBuilder();107                 cmd.AppendFormat("copy /b {0}+{1} {2}", path1, path2, newFileName);108                 try109                 {110                     RunCMD(cmd.ToString());111 112                     DialogResult dr = MessageBox.Show("╭(●`∀´●)╯╰(●’?’●)╮/r/n生成成功!點擊確定查看", "成功", MessageBoxButtons.OK, MessageBoxIcon.Information);113                     if (dr == DialogResult.OK)114                     {115                         Process open = new Process();116                         open.StartInfo.FileName = "explorer";117                         open.StartInfo.Arguments = @"/select," + newFileName;118                         open.Start();119                     }120                 }121                 catch (Exception ex)122                 {123                     MessageBox.Show("╮(?•? ?•??)╭壓縮失敗,錯誤原因:/r/n" + ex.Message, "Oops!", MessageBoxButtons.OK, MessageBoxIcon.Error);124                 }125             }126 127         }128 129         private void RunCMD(string cmd)130         {131             System.Diagnostics.Process p = new System.Diagnostics.Process();132             p.StartInfo.FileName = "cmd.exe";133             p.StartInfo.UseShellExecute = false;    //是否使用操作系統shell啟動134             p.StartInfo.RedirectStandardInput = true;//接受來自調用程序的輸入信息135             p.StartInfo.RedirectStandardOutput = true;//由調用程序獲取輸出信息136             p.StartInfo.RedirectStandardError = true;//重定向標準錯誤輸出137             p.StartInfo.CreateNoWindow = true;//不顯示程序窗口138             p.Start();//啟動程序139 140             //向cmd窗口發送輸入信息141             p.StandardInput.WriteLine(cmd + "&exit");142 143             p.StandardInput.AutoFlush = true;144             //p.StandardInput.WriteLine("exit");145             //向標準輸入寫入要執行的命令。這里使用&是批處理命令的符號,表示前面一個命令不管是否執行成功都執行后面(exit)命令,如果不執行exit命令,后面調用ReadToEnd()方法會假死146             //同類的符號還有&&和||前者表示必須前一個命令執行成功才會執行后面的命令,后者表示必須前一個命令執行失敗才會執行后面的命令147 148             149             //獲取cmd窗口的輸出信息150             string output = p.StandardOutput.ReadToEnd();151             p.WaitForExit();//等待程序執行完退出進程152             p.Close();153 154             //Console.WriteLine(output);155         }156     }157 }

 

程序在這里,右鍵保存圖片,改后綴為zip或者rar等壓縮文件格式后就可以打開了。

 

注:保存成gif圖片 用瀏覽器查看可能無法查看,但是用畫圖或者圖片查看器打開是可以顯示的。

  Win10系統無效,不知道是什么問題。可能是cmd的那個命令在win10沒用了吧。Win7、WIN8.1有效,其他未測。

 

參考資料:C#程序調用cmd執行命令

       C#打開文件所在的文件夾

 

最后:唉,園齡2年多了,還是前幾天才開的博客。這才是第一篇。我甚至還猶豫到底要不要寫下來。因為感覺這實在太簡單了,一點含量都沒有,都不好意思寫出來,寫這到底有沒有意義。

  不過也想通了,不會就要多記,我記性也差,以前用的東西,學過的東西,過段時間沒用就忘了,等某個時候又要用了又去翻以前的代碼看。東西又亂,夠翻的。以后就記在這里了!

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鄂伦春自治旗| 鱼台县| 康马县| 眉山市| 韶关市| 林西县| 洛浦县| 浑源县| 双江| 泸西县| 田阳县| 四子王旗| 来安县| 若尔盖县| 佛冈县| 尼勒克县| 綦江县| 台南县| 呼和浩特市| 雷波县| 克什克腾旗| 南京市| 安福县| 安徽省| 萝北县| 宣城市| 乾安县| 潞城市| 额敏县| 太白县| 平邑县| 陵川县| 南溪县| 格尔木市| 广昌县| 广东省| 平顶山市| 慈利县| 郯城县| 土默特左旗| 稷山县|