using System; using System.Collections.Generic; using System.Linq; using System.Web; using TradeManageNew.LabelWebReference; using System.Net; using System.Drawing; using System.Drawing.Drawing2D; using System.IO; namespace TradeManageNew { public class UpsLabel { public static string AccessLicenseNumber = ""; public static string Username = ""; public static string Password = ""; public static string ShipperNumber = ""; public string GetLabel(string trackcode,out string error) { try { LBRecovery lb_recovery = new LBRecovery(); LabelRecoveryRequest label_recovery_request = new LabelRecoveryRequest(); UPSSecurity upss = new UPSSecurity(); UPSSecurityServiceAccessToken upssSvcAccessToken = new UPSSecurityServiceAccessToken(); upssSvcAccessToken.AccessLicenseNumber = AccessLicenseNumber;// "5D83BCCDEFB9A5D5"; upss.ServiceAccessToken = upssSvcAccessToken; UPSSecurityUsernameToken upssUsrNameToken = new UPSSecurityUsernameToken(); upssUsrNameToken.Username = Username;// "Karmasfar"; upssUsrNameToken.Password = Password;// "Km28862820"; upss.UsernameToken = upssUsrNameToken; lb_recovery.UPSSecurityValue = upss; RequestType request = new RequestType(); label_recovery_request.Request = request; label_recovery_request.TrackingNumber = trackcode;// "1ZRE8474YW96563012"; lb_recovery.Url = "https://onlinetools.ups.com/webservices/LBRecovery"; ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; LabelRecoveryResponse label_recovery_response = lb_recovery.ProcessLabelRecovery(label_recovery_request); var md = label_recovery_response.Items[0]; // Base64StringToImage(label_recovery_response.Items[0]); LabelResultsType umd = (LabelResultsType)label_recovery_response.Items[0]; //image.LabelImage string LabelPath = AppDomain.CurrentDomain.BaseDirectory + "attached/ups/";// @"F:\褚明杰\fedex\ShipService_v2014_cs\cs\ShipWebServiceClient\Express\International\ShipWebServiceClient\bin\Release\pdf\"; Random rd = new Random(); String LabelFileName = LabelPath + DateTime.Now.ToString("yyyyMMddHHmmssfff")+rd.Next(100,999).ToString() + ".png"; String LabelFileName2 = LabelPath + trackcode + ".png"; Base64StringToImage(umd.LabelImage.GraphicImage, LabelFileName); using (FileStream file = new FileStream(LabelFileName, FileMode.Open)) { Image img = Image.FromStream(file); UpsLabel obj3 = new UpsLabel(); var img2 = obj3.RotateImg(img, 90); img2.Save(LabelFileName2); } // Console.WriteLine("Image Base64:\n " + image.GraphicImage); error = ""; return "ok"; // Console.ReadKey(); } catch (System.Web.Services.Protocols.SoapException ex) { //Console.WriteLine(""); //Console.WriteLine("---------LBRecovery Web Service returns error----------------"); //Console.WriteLine("---------\"Hard\" is user error \"Transient\" is system error----------------"); //Console.WriteLine("SoapException Message= " + ex.Message); //Console.WriteLine(""); //Console.WriteLine("SoapException Category:Code:Message= " + ex.Detail.LastChild.InnerText); //Console.WriteLine(""); //Console.WriteLine("SoapException XML String for all= " + ex.Detail.LastChild.OuterXml); //Console.WriteLine(""); //Console.WriteLine("SoapException StackTrace= " + ex.StackTrace); //Console.WriteLine("-------------------------"); //Console.WriteLine(""); error = "SoapException Message= " + ex.Message + "SoapException Category:Code:Message= " + ex.Detail.LastChild.InnerText+"SoapException XML String for all= " + ex.Detail.LastChild.OuterXml; return ""; } catch (Exception ex) { //Console.WriteLine(""); //Console.WriteLine("-------------------------"); //Console.WriteLine(" General Exception= " + ex.Message); //Console.WriteLine(" General Exception-StackTrace= " + ex.StackTrace); //Console.WriteLine("-------------------------"); error = "General Exception= " + ex.Message + "General Exception-StackTrace= " + ex.StackTrace; return ""; } } public class UPSModel { public Object LabelImage { get; set; } public string TrackingNumber { get; set; } } public class LabelImage { public string GraphicImage { get; set; } } /// /// 把base64字符串转化为图片,传入base64字符串 /// /// /// public static void Base64StringToImage(string strbase64,string path) { try { strbase64 = strbase64.Replace(' ', '+'); System.IO.MemoryStream stream = new System.IO.MemoryStream(Convert.FromBase64String(strbase64)); System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write); byte[] b = stream.ToArray(); //byte[] b = stream.GetBuffer(); fs.Write(b, 0, b.Length); fs.Close(); } catch (Exception ex) { } } /// /// 根据角度旋转图标 /// /// public Image RotateImg(Image img, float angle) { //通过Png图片设置图片透明,修改旋转图片变黑问题。 int width = img.Width; int height = img.Height; //角度 Matrix mtrx = new Matrix(); mtrx.RotateAt(angle, new PointF((width / 2), (height / 2)), MatrixOrder.Append); //得到旋转后的矩形 GraphicsPath path = new GraphicsPath(); path.AddRectangle(new RectangleF(0f, 0f, width, height)); RectangleF rct = path.GetBounds(mtrx); //生成目标位图 Bitmap devImage = new Bitmap((int)(rct.Width), (int)(rct.Height)); Graphics g = Graphics.FromImage(devImage); g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bilinear; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; //计算偏移量 Point Offset = new Point((int)(rct.Width - width) / 2, (int)(rct.Height - height) / 2); //构造图像显示区域:让图像的中心与窗口的中心点一致 Rectangle rect = new Rectangle(Offset.X, Offset.Y, (int)width, (int)height); Point center = new Point((int)(rect.X + rect.Width / 2), (int)(rect.Y + rect.Height / 2)); g.TranslateTransform(center.X, center.Y); g.RotateTransform(angle); //恢复图像在水平和垂直方向的平移 g.TranslateTransform(-center.X, -center.Y); g.DrawImage(img, rect); //重至绘图的所有变换 g.ResetTransform(); g.Save(); g.Dispose(); path.Dispose(); return devImage; } /// /// 第二种方法 /// /// /// /// public Image RotateImg2(Image b, float angle) { angle = angle % 360; //弧度转换 double radian = angle * Math.PI / 180.0; double cos = Math.Cos(radian); double sin = Math.Sin(radian); //原图的宽和高 int w = b.Width; int h = b.Height; int W = (int)(Math.Max(Math.Abs(w * cos - h * sin), Math.Abs(w * cos + h * sin))); int H = (int)(Math.Max(Math.Abs(w * sin - h * cos), Math.Abs(w * sin + h * cos))); //目标位图 Image dsImage = new Bitmap(W, H); System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(dsImage); g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bilinear; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; //计算偏移量 Point Offset = new Point((W - w) / 2, (H - h) / 2); //构造图像显示区域:让图像的中心与窗口的中心点一致 Rectangle rect = new Rectangle(Offset.X, Offset.Y, w, h); Point center = new Point(rect.X + rect.Width / 2, rect.Y + rect.Height / 2); g.TranslateTransform(center.X, center.Y); g.RotateTransform(360 - angle); //恢复图像在水平和垂直方向的平移 g.TranslateTransform(-center.X, -center.Y); g.DrawImage(b, rect); //重至绘图的所有变换 g.ResetTransform(); g.Save(); g.Dispose(); //dsImage.Save("yuancd.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); return dsImage; } } }