367 lines
14 KiB
C#
367 lines
14 KiB
C#
using AllBase;
|
||
using AllBase.Model.Param.FissionManage;
|
||
using TemuKJD.KJDForms.BaseForms;
|
||
using TemuKJD.KJDForms.ToolForms;
|
||
using NaiBa.Util;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.IO;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
using System.Windows.Forms;
|
||
using Work;
|
||
|
||
namespace TemuKJD.KJDForms.ProductForms
|
||
{
|
||
class FissionBrowserObject
|
||
{
|
||
public delegate void InformationReceivedHandler(string information);
|
||
public event InformationReceivedHandler InformationReceived;
|
||
|
||
/// <summary>
|
||
/// 编辑图片后更新到服务器
|
||
/// </summary>
|
||
/// <param name="str"></param>
|
||
/// <returns></returns>
|
||
public string updatePic(string str)
|
||
{
|
||
string requestData = "data=" + GetHtml.UrlEncodeUtf8(str);
|
||
string url = BaseClass.FissionPicUrl;
|
||
string result = GetHtml.PostUtf8(url, requestData);
|
||
return result.Replace("https:", "http:");
|
||
}
|
||
|
||
string addResult = "";
|
||
public string addLocalPic()
|
||
{
|
||
// 单线程单元(STA)模式运行文件对话框,否则会报错。
|
||
System.Threading.Thread InvokeThread = new System.Threading.Thread(new System.Threading.ThreadStart(addLocalPicInvokeMethod));
|
||
InvokeThread.SetApartmentState(System.Threading.ApartmentState.STA);
|
||
InvokeThread.Start();
|
||
InvokeThread.Join();
|
||
|
||
if (addResult.Equals("图片过大"))
|
||
{
|
||
BaseMsgForm.ShowInfo("本地图片大小不能超过500KB", "提示");
|
||
return "";
|
||
}
|
||
return addResult;
|
||
}
|
||
|
||
public string addLocalPic(bool isMultiselect, int maxSize = 1024)
|
||
{
|
||
addLocalPicInvokeMethod(isMultiselect, maxSize);
|
||
if (addResult.Equals("图片过大"))
|
||
{
|
||
BaseMsgForm.ShowInfo(("本地图片大小不能超过" + maxSize + "KB").Replace("1024KB", "1MB"), "提示");
|
||
return "";
|
||
}
|
||
return addResult;
|
||
}
|
||
|
||
private void addLocalPicInvokeMethod()
|
||
{
|
||
addLocalPicInvokeMethod(true);
|
||
}
|
||
|
||
private string addLocalPicInvokeMethod(bool isMultiselect, int maxSize = 500)
|
||
{
|
||
OpenFileDialog ofd = new OpenFileDialog();
|
||
ofd.Filter = "图片文件|*.png;*.jpg;*.jpeg;*.gif";
|
||
ofd.ValidateNames = true;
|
||
ofd.CheckPathExists = true;
|
||
ofd.CheckFileExists = true;
|
||
ofd.Multiselect = isMultiselect;
|
||
if (ofd.ShowDialog() == DialogResult.OK)
|
||
{
|
||
var result = "";
|
||
foreach (var fName in ofd.FileNames)
|
||
{
|
||
FileInfo file = new FileInfo(fName);
|
||
var size = file.Length;
|
||
|
||
// 图片大小限制500k;
|
||
if (size <= 1024 * maxSize)
|
||
{
|
||
string strFileName = fName;
|
||
|
||
var base64 = "data:image/" + System.IO.Path.GetExtension(fName).Replace(".", "").Replace("jpeg", "jpg") +
|
||
";base64," + Convert.ToBase64String(System.IO.File.ReadAllBytes(strFileName));
|
||
|
||
result += updatePic(base64) + "|";
|
||
}
|
||
else
|
||
{
|
||
result += "图片过大|";
|
||
}
|
||
}
|
||
addResult = result.TrimEnd('|');
|
||
}
|
||
return addResult;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 前端处理图片如果有跨域问题,将图片地址传到cs代码解决
|
||
/// </summary>
|
||
/// <param name="picUrl">跨域的图片地址</param>
|
||
/// <returns>图片的base64数据</returns>
|
||
public string getHttpPicBase64(string picUrl)
|
||
{
|
||
System.Drawing.Image image = System.Drawing.Image.FromStream(
|
||
System.Net.WebRequest.Create(picUrl).GetResponse().GetResponseStream());
|
||
|
||
System.IO.MemoryStream ms = new System.IO.MemoryStream();
|
||
image.Save(ms, image.RawFormat);
|
||
byte[] byteArray = ms.ToArray();
|
||
var str64 = "data:image/" + System.IO.Path.GetExtension(picUrl).Replace(".", "").Replace("jpeg", "jpg") +
|
||
";base64," + Convert.ToBase64String(byteArray);
|
||
|
||
ms.Close();
|
||
image.Dispose();
|
||
return str64;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 使用美图秀秀软件修图
|
||
/// </summary>
|
||
/// <param name="src">图片网址</param>
|
||
/// <param name="bOpenMeitu">下载图片后是否打开美图</param>
|
||
public string OpenMeitu(string src, bool bOpenMeitu = true)
|
||
{
|
||
string imgName = System.IO.Path.GetFileNameWithoutExtension(src) +
|
||
System.IO.Path.GetExtension(src).Replace(".jpeg", ".jpg");
|
||
string savePath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
|
||
string saveFilePath = System.IO.Path.Combine(savePath, imgName);
|
||
|
||
System.Net.WebRequest imgRequst = System.Net.WebRequest.Create(src);
|
||
System.Drawing.Image downImage = System.Drawing.Image.FromStream(imgRequst.GetResponse().GetResponseStream());
|
||
downImage.Save(saveFilePath);
|
||
downImage.Dispose();
|
||
|
||
if (!bOpenMeitu) return "success";
|
||
if (System.IO.File.Exists(saveFilePath))
|
||
{
|
||
if (!System.IO.File.Exists(Fission.GetInstance().MeituPath))
|
||
{
|
||
//MessageBox.Show("请指定美图秀秀启动文件。");
|
||
if (MeituMessageDialog.ShowMessageDialog("请指定美图秀秀启动文件。\r\n如未安装美图秀秀,请下载。", "下载美图秀秀,指定启动文件") == "指定启动文件")
|
||
{
|
||
// 单线程单元(STA)模式运行文件对话框,否则会报错。
|
||
System.Threading.Thread InvokeThread = new System.Threading.Thread(new System.Threading.ThreadStart(SetMeituPath));
|
||
InvokeThread.SetApartmentState(System.Threading.ApartmentState.STA);
|
||
InvokeThread.Start();
|
||
InvokeThread.Join();
|
||
}
|
||
}
|
||
|
||
if (System.IO.File.Exists(Fission.GetInstance().MeituPath))
|
||
{
|
||
try
|
||
{
|
||
int i = 0;
|
||
while (i < 2500)
|
||
{
|
||
System.Diagnostics.Process[] processList = System.Diagnostics.Process.GetProcesses();
|
||
if (processList.Any(p => p.ProcessName.ToLower() == "xiuxiu"))
|
||
{
|
||
System.Threading.Thread.Sleep(250);
|
||
i += 250;
|
||
continue;
|
||
}
|
||
break;
|
||
}
|
||
System.Diagnostics.Process.Start(Fission.GetInstance().MeituPath, saveFilePath);
|
||
return "success";
|
||
}
|
||
catch { }
|
||
}
|
||
}
|
||
return "failed";
|
||
}
|
||
|
||
private void SetMeituPath()
|
||
{
|
||
Fission.GetInstance().setMeituPath();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 将美图修好的本地文件回传服务器
|
||
/// </summary>
|
||
public string PullBackPic(string src)
|
||
{
|
||
string imgName = Path.GetFileName(src);
|
||
string savePath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
|
||
string filePath = Path.Combine(savePath, imgName);
|
||
filePath = GetMeituHandledFilePath(filePath);
|
||
if (!File.Exists(filePath))
|
||
{
|
||
BaseMsgForm.ShowInfo("未找到修图文件,请确认已使用[美图秀秀]\r\n进行修图且保存路径为[覆盖原图]!", "提示");
|
||
return "";
|
||
}
|
||
|
||
var fileByte = System.IO.File.ReadAllBytes(filePath);
|
||
//using (FileStream fs = new FileStream(filePath,FileMode.Open,FileAccess.Read))
|
||
//{
|
||
// System.Drawing.Image img = Image.FromStream(fs);
|
||
// var width = img.Width;
|
||
// img.Dispose();
|
||
// if (width < 480)
|
||
// {
|
||
// BaseMsgForm.ShowError("详情图宽度不得小于480", "错误");
|
||
// return "";
|
||
// }
|
||
//}
|
||
|
||
if (fileByte.Length > 1024 * 500)
|
||
{
|
||
BaseMsgForm.ShowError("本地图片大小不能超过500KB", "错误");
|
||
return "";
|
||
}
|
||
|
||
var base64 = "data:image/" + System.IO.Path.GetExtension(filePath).Replace(".", "").Replace("jpeg", "jpg") +
|
||
";base64," + Convert.ToBase64String(fileByte);
|
||
|
||
var uploadResult = updatePic(base64);
|
||
return uploadResult;
|
||
}
|
||
|
||
void SendCmd(string information)
|
||
{
|
||
if (InformationReceived != null)
|
||
InformationReceived(information);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 显示大图
|
||
/// </summary>
|
||
/// <param name="imgSrc"></param>
|
||
/// <returns></returns>
|
||
public string ShowBigImg(string imgSrc)
|
||
{
|
||
var f = Fission.GetInstance();
|
||
if (f != null && !string.IsNullOrEmpty(imgSrc))
|
||
{
|
||
string[] str = imgSrc.Split('|');
|
||
imgSrc = str[0];
|
||
string imgId = "";
|
||
if (str.Length > 1)
|
||
imgId = str[1];
|
||
return f.ShowBigImg(imgSrc, imgId);
|
||
}
|
||
return "error";
|
||
}
|
||
|
||
/// <summary>
|
||
/// 编辑图片后加载
|
||
/// </summary>
|
||
/// <param name="id"></param>
|
||
/// <param name="src"></param>
|
||
/// <param name="text"></param>
|
||
/// <returns></returns>
|
||
public string OnloadImg(string id, string src)
|
||
{
|
||
//src = Fission.RemovePrefix(src);
|
||
//if (src.Contains("deifei.com"))
|
||
//{
|
||
// var jdImg = Fission.jdTransparentImgList.Find(x => x.id == id);
|
||
// if (jdImg != null)
|
||
// {
|
||
// jdImg.OriginalImgUrl = src;
|
||
// return JsonHelper.SerializeObject(new { code = 1, src = "http://" + jdImg.OriginalImgUrl, msg = "原" });
|
||
// }
|
||
//}
|
||
return JsonHelper.SerializeObject(new { code = 0, src = src, msg = "" });
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取美图秀秀处理过的图片路径
|
||
/// </summary>
|
||
/// <param name="filePath">初始图片路径</param>
|
||
/// <returns>处理后的图片路径</returns>
|
||
private string GetMeituHandledFilePath(string filePath)
|
||
{
|
||
string filePathWithoutExt = filePath.Substring(0, filePath.LastIndexOf('.'));
|
||
//jpg png bmp为美图秀秀指定的三种图片保存格式
|
||
if (File.Exists(filePathWithoutExt + ".jpg"))
|
||
{
|
||
return filePathWithoutExt + ".jpg";
|
||
}
|
||
if (File.Exists(filePathWithoutExt + ".png"))
|
||
{
|
||
return filePathWithoutExt + ".png";
|
||
}
|
||
if (File.Exists(filePathWithoutExt + ".bmp"))
|
||
{
|
||
return filePathWithoutExt + ".bmp";
|
||
}
|
||
return filePath;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 裂变页面 js回调添加入库数据
|
||
/// </summary>
|
||
/// <param name="jsonStr"></param>
|
||
/// <returns></returns>
|
||
public string updateFessionDate(string jsonStr)
|
||
{
|
||
try
|
||
{
|
||
FissionDataModel fessionDataModel = Newtonsoft.Json.JsonConvert.DeserializeObject<FissionDataModel>(jsonStr);
|
||
fessionDataModel.prop_pic?.Clear();
|
||
var props = JsonHelper.DeserializeJsonToObject<List<PropBase>>(fessionDataModel.props);
|
||
foreach (var prop in props)
|
||
{
|
||
foreach (var value in prop.Values)
|
||
{
|
||
if (!string.IsNullOrEmpty(value.image))
|
||
{
|
||
var strImg = value.image;
|
||
if (!strImg.StartsWith("http"))
|
||
strImg = "http:" + strImg;
|
||
fessionDataModel.prop_pic.Add(strImg);
|
||
}
|
||
}
|
||
}
|
||
jsonStr = JsonHelper.SerializeObject(fessionDataModel);
|
||
|
||
// 调用php后台
|
||
string requestData = UserLogin.GetSignaturex() + "&act=add&text=" + GetHtml.UrlEncodeUtf8(jsonStr);
|
||
string url = BaseClass.BuildFissionObjString("fession_api");
|
||
string result = GetHtml.PostUtf8(url, requestData);
|
||
if (!result.Contains("\"code\":0"))
|
||
{
|
||
}
|
||
return result;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
return "{\"code\":1}";
|
||
}
|
||
}
|
||
|
||
public string GetFissionPicCountPreLine()
|
||
{
|
||
var count = ""; // NaiBa.Util.Helper.ConfigHelper.LoadConfig<string>("fission_pic_count_pre_line");
|
||
try { count = NaiBa.Util.Helper.FileHelper.ReadAllText("data\\config\\fission_pic_count_pre_line")?.Trim('\"'); } catch { }
|
||
if (string.IsNullOrEmpty(count))
|
||
return "3";
|
||
else
|
||
return count;
|
||
}
|
||
public string SaveFissionPicCountPreLine(string count)
|
||
{
|
||
try
|
||
{
|
||
NaiBa.Util.Helper.ConfigHelper.SaveConfig<string>("fission_pic_count_pre_line", count);
|
||
return "success";
|
||
}
|
||
catch
|
||
{
|
||
}
|
||
|
||
return "failed";
|
||
}
|
||
}
|
||
}
|