由於目前印兔項目中的在線設計功能設計出來的產品顏色模式不確定,但是客戶設計出來的產品需要發送到印廠的客戶端去下載並且印刷,只有CMYK顏色模式的產品才能正確印刷,所以需要判斷產品的顏色模式是否為CMYK,如果不是就將產品的顏色模式轉為CMYK模式。
首先需判斷目前產品的顏色模式
1 Image img = Bitmap.FromFile("圖片路徑", true); 2 3 PixelFormat pf = (PixelFormat)img.PixelFormat; 4 if (pf.ToString() == "8207") 5 { 6 MessageBox.Show("圖片是CMYK模式!"); 7 }
因為img.PixelFormat的返回值為Format8bppIndexed 灰度模式,在遇到RGB等其他顏色模式時返回“Format24bppRgb”,但是在遇到CMYK模式的圖片是返回“8207”
我剛開始以為還要算法,因為CMYK轉RGB有對應的算法,但是沒有找到RGB轉CMYK的算法,所以就想把CMYK轉RGB的公式反推回去,結果被安排了 /笑哭 (算法啥的本人都沒接觸過,有啥不對的大家就噴吧 /陰險)
后來找到了對應的RGB轉CMYK的算法
c'=255-r; m'=255-g; y'=255-b; k=min(c',m',y'); c=c'-k; m=m'-k; y=y'-k; R‘ =R/255 G‘ =G/255 B‘ = B/255 K= 1-max(R‘,G‘,B‘) C= (1-R‘-K) / (1-K) M= (1-G‘-K) / (1-K) Y= (1-B‘-K) / (1-K)
找了兩個,算出值需要省略小數點后不需要的,乘100就好
然后又了解到magick.net,用NuGet可以直接引用到項目中
MagickImage magickImage = new MagickImage("圖片路徑"); //MessageBox.Show(magickImage.ColorSpace.ToString()); //magickImage.TransformColorSpace(ColorProfile.AdobeRGB1998); //magickImage.Settings.ColorSpace = ImageMagick.ColorSpace.CMYK; magickImage.ColorSpace = ColorSpace.CMYK; string path = @"D:\cmyk" + ((TimeSpan)(DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1))).TotalMilliseconds + ".jpg"; magickImage.Write(path); magickImage.Dispose(); MessageBox.Show("圖片已轉換CMYK模式!\n 路徑:" + path);
就簡單的幾句代碼就OK了
本人技術不精,就是個人研究,也不確定這樣寫是不是正確,只是作為個人的一個積累,也希望給后邊的人一個借鑒,坐等大佬安排 !!!