使用Aspose组件转换图片

使用Aspose组件的好处是,不需要用户的机器上安装Office,也可以完成我们想要的功能。这个优势实在是太明显了,所以,我最终选折了这个方案。而且,Aspose完全支持word、ppt、和pdf,甚至excel也没问题。

首先我们要准备好Aspose的dll 引用到我们项目中,这里是下载链接:   https://pan.baidu.com/s/11gMa_G05KvQSSrq31Db2Kw

下面的代码就摘自示范Demo中。

上传文件js,Form表单提交代码:

//保存上传的课件
function Save() {if ($("#txtTitle").val() == "") {layer.msg('课件名称不能为空', function () { });return;}if ($("#upfile").val() == "") {layer.msg('上传文件不能为空', function () { });return;}if ($("#iid").val()==0){layer.msg('关联章节课程不能为空', function () { });return;}$('#form-horizontalid').ajaxSubmit({url: "/Resources_Add/Upload",type: "POST",dataType: "json",data: $('#form-horizontalid').serialize(),beforeSend: function (xhr, self) {var index = layer.load(0, { shade: false }); //0代表加载的风格,支持0-2if ($("#WaitingUp").html() != "") { $("#WaitingUp").html("(正在上传)"); }if ($("#WaitingUp_img").html() != "") { $("#WaitingUp_img").html("(正在上传)"); }},success: function (data) {layer.closeAll();if (data == "-1") {layer.msg('上传文件格式错误', function () { });return;} if (data > 0) {if (data == "888") {layer.msg('PPT文件异常,请检查文件!', { icon: 2 });return;}if (data == "999") {layer.msg('课件名称已存在', function () { });}else if (data == "0") {layer.msg('操作失败', { icon: 2 });}else {layer.msg('操作成功!', { icon: 1 });if ($("#WaitingUp").html() != "") { $("#WaitingUp").html("(上传成功)"); }if ($("#WaitingUp_img").html() != "") { $("#WaitingUp_img").html("(上传成功)"); }setTimeout("window.location.href = '/Admin/Resources'", 1000);}return;}else {layer.msg('操作失败', { icon: 2 });return;}},error: function (data) {layer.closeAll();layer.msg('上传文件异常!', { icon: 2 });}});
}

    #region 1.0上传文件时调用转换图片的方法public string Upload(){double FileSize = 0;string imgName = string.Empty;string imgUrl = "/img/Map";//课程idstring Curriculumid = Request["Curriculumid"];//章idstring Chapterid = Request["Chapterid"];//课程节idstring SectionId = Request["iid"];string url = string.Empty;string filePath = string.Empty;string CourseName = Request["txtTitle"];HttpPostedFileBase hpFile = Request.Files["upfile"];//1.0判断文件是否为空if (hpFile != null){//1.1获取文件后缀名string FileType = System.IO.Path.GetExtension(hpFile.FileName);//1.2获取路径string FileName = Path.GetFileName(hpFile.FileName).Replace(FileType, "").Replace(".", "") + FileType;url = ResourceConversionURL(FileName);filePath = Server.MapPath(url);hpFile.SaveAs(filePath);//获取文件大小System.IO.FileInfo fileinfo = new System.IO.FileInfo(Server.MapPath(url));FileSize = System.Math.Ceiling(fileinfo.Length/1024.0); //这里在执行转换图片的时候需要调用Aspose类LicenseHelper.ModifyInMemory.ActivateMemoryPatching();if (FileType == ".pptx" || FileType == ".ppt"){PictureConversion pc = new PictureConversion();imgName = pc.ConvertToImage_PPT(filePath, Server.MapPath(imgUrl), 0, 0, 145, FileType, imgUrl);if (imgName=="888"){return "888";}if (imgName != "" || imgName != null){int i = 0;i = Add(Curriculumid, Chapterid, SectionId, CourseName, FileType, imgName);if (i > 0){return "1";}else if (i==-2){return "999";}else{return "0";}}}else if (FileType == ".mp4"){if (FileSize>0){int i = 0;i = Add(Curriculumid, Chapterid, SectionId, CourseName, FileType, url);if (i > 0){return "1";}else if (i == -2){return "999";}else{return "0";}}}else{return "-1";}}return "";}#endregion

ModifyInMemory类代码:

using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text;
using System.Xml;namespace LicenseHelper
{public static class ModifyInMemory{private static string AsposeList = "Aspose.3D.dll, Aspose.BarCode.dll, Aspose.BarCode.Compact.dll, Aspose.BarCode.WPF.dll, Aspose.Cells.GridDesktop.dll, Aspose.Cells.GridWeb.dll, Aspose.CAD.dll, Aspose.Cells.dll, Aspose.Diagram.dll, Aspose.Email.dll, Aspose.Imaging.dll, Aspose.Note.dll, Aspose.OCR.dll, Aspose.Pdf.dll, Aspose.Slides.dll, Aspose.Tasks.dll, Aspose.Words.dll";public static void ActivateMemoryPatching(){Assembly[] arr = AppDomain.CurrentDomain.GetAssemblies();foreach (Assembly assembly in arr){if (AsposeList.IndexOf(assembly.FullName.Split(',')[0] + ".dll") != -1)ActivateForAssembly(assembly);}AppDomain.CurrentDomain.AssemblyLoad += new AssemblyLoadEventHandler(ActivateOnLoad);}private static void ActivateOnLoad(object sender, AssemblyLoadEventArgs e){if (AsposeList.IndexOf(e.LoadedAssembly.FullName.Split(',')[0] + ".dll") != -1)ActivateForAssembly(e.LoadedAssembly);}private static void ActivateForAssembly(Assembly assembly){MethodInfo miLicensed1 = typeof(ModifyInMemory).GetMethod("InvokeMe1", BindingFlags.NonPublic | BindingFlags.Static);MethodInfo miLicensed2 = typeof(ModifyInMemory).GetMethod("InvokeMe2", BindingFlags.NonPublic | BindingFlags.Static);MethodInfo miEvaluation = null;Dictionary<string, MethodInfo> miDict = new Dictionary<string, MethodInfo>(){{"System.DateTime"      , miLicensed1},{"System.Xml.XmlElement", miLicensed2}};Type[] arrType = null;bool isFound = false;int nCount = 0;try{arrType = assembly.GetTypes();}catch (ReflectionTypeLoadException err){arrType = err.Types;}foreach (Type type in arrType){if (isFound) break;if (type == null) continue;MethodInfo[] arrMInfo = type.GetMethods(BindingFlags.NonPublic | BindingFlags.Static);foreach (MethodInfo info in arrMInfo){if (isFound) break;try{string strMethod = info.ToString();if ((strMethod.IndexOf("(System.Xml.XmlElement, System.String)") > 0) && (miDict.ContainsKey(info.ReturnType.ToString()))){miEvaluation = info;MemoryPatching(miEvaluation, miDict[miEvaluation.ReturnType.ToString()]);nCount++;if (((assembly.FullName.IndexOf("Aspose.Pdf") == -1) && (nCount == 2)) ||((assembly.FullName.IndexOf("Aspose.Pdf") != -1) && (nCount == 6))){isFound = true;break;}}}catch{throw new InvalidOperationException("MemoryPatching for \"" + assembly.FullName + "\" failed !");}}}String[] aParts = assembly.FullName.Split(',');string fName = aParts[0];if (fName.IndexOf("Aspose.BarCode.") != -1)fName = "Aspose.BarCode";else if (fName.IndexOf("Aspose.3D") != -1)fName = "Aspose.ThreeD";try{Type type2 = assembly.GetType(fName + ".License");MethodInfo mi = type2.GetMethod("SetLicense", new Type[] { typeof(Stream) });string LData = "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPExpY2Vuc2U+CiAgPERhdGE+CiAgICA8TGljZW5zZWRUbz5MaWNlbnNlZTwvTGljZW5zZWRUbz4KICAgIDxFbWFpbFRvPmxpY2Vuc2VlQGVtYWlsLmNvbTwvRW1haWxUbz4KICAgIDxMaWNlbnNlVHlwZT5EZXZlbG9wZXIgT0VNPC9MaWNlbnNlVHlwZT4KICAgIDxMaWNlbnNlTm90ZT5MaW1pdGVkIHRvIDEwMDAgZGV2ZWxvcGVyLCB1bmxpbWl0ZWQgcGh5c2ljYWwgbG9jYXRpb25zPC9MaWNlbnNlTm90ZT4KICAgIDxPcmRlcklEPjc4NDM3ODU3Nzg1PC9PcmRlcklEPgogICAgPFVzZXJJRD4xMTk3ODkyNDM3OTwvVXNlcklEPgogICAgPE9FTT5UaGlzIGlzIGEgcmVkaXN0cmlidXRhYmxlIGxpY2Vuc2U8L09FTT4KICAgIDxQcm9kdWN0cz4KICAgICAgPFByb2R1Y3Q+QXNwb3NlLlRvdGFsIFByb2R1Y3QgRmFtaWx5PC9Qcm9kdWN0PgogICAgPC9Qcm9kdWN0cz4KICAgIDxFZGl0aW9uVHlwZT5FbnRlcnByaXNlPC9FZGl0aW9uVHlwZT4KICAgIDxTZXJpYWxOdW1iZXI+e0YyQjk3MDQ1LTFCMjktNEIzRi1CRDUzLTYwMUVGRkExNUFBOX08L1NlcmlhbE51bWJlcj4KICAgIDxTdWJzY3JpcHRpb25FeHBpcnk+MjA5OTEyMzE8L1N1YnNjcmlwdGlvbkV4cGlyeT4KICAgIDxMaWNlbnNlVmVyc2lvbj4zLjA8L0xpY2Vuc2VWZXJzaW9uPgogIDwvRGF0YT4KICA8U2lnbmF0dXJlPlFYTndiM05sTGxSdmRHRnNJRkJ5YjJSMVkzUWdSbUZ0YVd4NTwvU2lnbmF0dXJlPgo8L0xpY2Vuc2U+";Stream stream = new MemoryStream(Convert.FromBase64String(LData));stream.Seek(0, SeekOrigin.Begin);mi.Invoke(Activator.CreateInstance(type2, null), new Stream[] { stream });}catch{//throw new InvalidOperationException("SetLicense for \"" + assembly.FullName + "\" failed !");
            }}private static DateTime InvokeMe1(XmlElement element, string name){return DateTime.MaxValue;}private static XmlElement InvokeMe2(XmlElement element, string name){if (element.LocalName == "License"){string License64 = "PERhdGE+PExpY2Vuc2VkVG8+R3JvdXBEb2NzPC9MaWNlbnNlZFRvPjxMaWNlbnNlVHlwZT5TaXRlIE9FTTwvTGljZW5zZVR5cGU+PExpY2Vuc2VOb3RlPkxpbWl0ZWQgdG8gMTAgZGV2ZWxvcGVyczwvTGljZW5zZU5vdGU+PE9yZGVySUQ+MTMwNzI0MDQwODQ5PC9PcmRlcklEPjxPRU0+VGhpcyBpcyBhIHJlZGlzdHJpYnV0YWJsZSBsaWNlbnNlPC9PRU0+PFByb2R1Y3RzPjxQcm9kdWN0PkFzcG9zZS5Ub3RhbDwvUHJvZHVjdD48L1Byb2R1Y3RzPjxFZGl0aW9uVHlwZT5FbnRlcnByaXNlPC9FZGl0aW9uVHlwZT48U2VyaWFsTnVtYmVyPjliNTc5NTAxLTUyNjEtNDIyMC04NjcwLWZjMmQ4Y2NkZDkwYzwvU2VyaWFsTnVtYmVyPjxTdWJzY3JpcHRpb25FeHBpcnk+MjAxNDA3MjQ8L1N1YnNjcmlwdGlvbkV4cGlyeT48TGljZW5zZVZlcnNpb24+Mi4yPC9MaWNlbnNlVmVyc2lvbj48L0RhdGE+PFNpZ25hdHVyZT5udFpocmRoL3I0QS81ZFpsU2dWYnhac0hYSFBxSjZ5UVVYa0RvaW4vS2lVZWhUUWZET0lQdHdzUlR2NmRTUVplOVdXekNnV3RGdkdROWpmR2QySmF4YUQvbkx1ZEk2R0VVajhqeVhUMG4vbWRrMEF1WVZNYlBXRjJYd3dSTnFlTmRrblYyQjhrZVFwbDJ2RzZVbnhxS2J6VVFxS2Rhc1pzZ2w1Q0xqSFVEWms9PC9TaWduYXR1cmU+";element.InnerXml = new UTF8Encoding().GetString(Convert.FromBase64String(License64));}if (element.LocalName == "BlackList"){string BlackList64 = "PERhdGE+PC9EYXRhPjxTaWduYXR1cmU+cUJwMEx1cEVoM1ZnOWJjeS8vbUVXUk9KRWZmczRlY25iTHQxYlNhanU2NjY5RHlad09FakJ1eEdBdVBxS1hyd0x5bmZ5VWplYUNGQ0QxSkh2RVUxVUl5eXJOTnBSMXc2NXJIOUFyUCtFbE1lVCtIQkZ4NFMzckFVMnd6dkxPZnhGeU9DQ0dGQ2UraTdiSHlGQk44WHp6R1UwdGRPMGR1RTFoRTQ5M1RNY3pRPTwvU2lnbmF0dXJlPg==";element.InnerXml = new UTF8Encoding().GetString(Convert.FromBase64String(BlackList64));}XmlNodeList elementsByTagName = element.GetElementsByTagName(name);if (elementsByTagName.Count <= 0){return null;}return (XmlElement)elementsByTagName[0];}private static unsafe void MemoryPatching(MethodBase miEvaluation, MethodBase miLicensed){IntPtr IntPtrEval = GetMemoryAddress(miEvaluation);IntPtr IntPtrLicensed = GetMemoryAddress(miLicensed);if (IntPtr.Size == 8)*((long*)IntPtrEval.ToPointer()) = *((long*)IntPtrLicensed.ToPointer());else*((int*)IntPtrEval.ToPointer()) = *((int*)IntPtrLicensed.ToPointer());}private static unsafe IntPtr GetMemoryAddress(MethodBase mb){RuntimeHelpers.PrepareMethod(mb.MethodHandle);if ((Environment.Version.Major >= 4) || ((Environment.Version.Major == 2) && (Environment.Version.MinorRevision >= 3053))){return new IntPtr(((int*)mb.MethodHandle.Value.ToPointer() + 2));}UInt64* location = (UInt64*)(mb.MethodHandle.Value.ToPointer());int index = (int)(((*location) >> 32) & 0xFF);if (IntPtr.Size == 8){ulong* classStart = (ulong*)mb.DeclaringType.TypeHandle.Value.ToPointer();ulong* address = classStart + index + 10;return new IntPtr(address);}else{uint* classStart = (uint*)mb.DeclaringType.TypeHandle.Value.ToPointer();uint* address = classStart + index + 10;return new IntPtr(address);}}}
}
//End

PictureConversion代码:

using Aspose.Cells;
using BSI_InsuranceProject_DBUtility.Error;
using ESBasic;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace BSI_InsuranceProject_DBUtility
{/***************************************************************FileName:文件转图片工具类(支持格式:pdf、ppt、word)Author:邵Create Date:2018-5月15号******************************************************************/public class PictureConversion{/// <summary>/// 将Word文档转换为图片的方法      /// </summary>/// <param name="wordInputPath">Word文件路径</param>/// <param name="imageOutputDirPath">图片输出路径,如果为空,默认值为Word所在路径</param>      /// <param name="startPageNum">从PDF文档的第几页开始转换,如果为0,默认值为1</param>/// <param name="endPageNum">从PDF文档的第几页开始停止转换,如果为0,默认值为Word总页数</param>/// <param name="imageFormat">设置所需图片格式,如果为null,默认格式为PNG</param>/// <param name="resolution">设置图片的像素,数字越大越清晰,如果为0,默认值为128,建议最大值不要超过1024</param>public string ConvertToImage_Words(string wordInputPath, string imageOutputDirPath, int startPageNum, int endPageNum, ImageFormat imageFormat, int resolution, string imgUrl){try{Aspose.Words.Document doc = new Aspose.Words.Document(wordInputPath);if (doc == null){throw new Exception("Word文件无效或者Word文件被加密!");}if (imageOutputDirPath.Trim().Length == 0){imageOutputDirPath = Path.GetDirectoryName(wordInputPath);}if (!Directory.Exists(imageOutputDirPath)){Directory.CreateDirectory(imageOutputDirPath);}if (startPageNum <= 0){startPageNum = 1;}if (endPageNum > doc.PageCount || endPageNum <= 0){endPageNum = doc.PageCount;}if (startPageNum > endPageNum){int tempPageNum = startPageNum; startPageNum = endPageNum; endPageNum = startPageNum;}if (imageFormat == null){imageFormat = ImageFormat.Png;}if (resolution <= 0){resolution = 128;}string imageName = Path.GetFileNameWithoutExtension(wordInputPath);Aspose.Words.Saving.ImageSaveOptions imageSaveOptions = new Aspose.Words.Saving.ImageSaveOptions(Aspose.Words.SaveFormat.Png);imageSaveOptions.Resolution = resolution;string imgName = string.Empty;for (int i = startPageNum; i <= endPageNum; i++){MemoryStream stream = new MemoryStream();imageSaveOptions.PageIndex = i - 1;string imgPath = Path.Combine(imageOutputDirPath, imageName) + "_" + i.ToString("000") + "." + imageFormat.ToString();imgName += imgUrl + "/" + imageName + "_" + i.ToString("000") + "." + imageFormat.ToString() + "|";doc.Save(stream, imageSaveOptions);System.Drawing.Image img = System.Drawing.Image.FromStream(stream);System.Drawing.Bitmap bm = ESBasic.Helpers.ImageHelper.Zoom(img, 0.6f);bm.Save(imgPath, imageFormat);img.Dispose();stream.Dispose();bm.Dispose();System.Threading.Thread.Sleep(200);}if (!string.IsNullOrEmpty(imgName)){imgName = imgName.Substring(0, imgName.Length - 1);}return imgName;}catch (Exception ex){ErrorHandler.WriteError(ex);throw;}}/// <summary>/// 将PPT、Excel、Txt文档转换为图片的方法      /// </summary>/// <param name="originFilePath">ppt文件路径</param>/// <param name="imageOutputDirPath">图片输出路径,如果为空,默认值为pdf所在路径</param>       /// <param name="startPageNum">从PDF文档的第几页开始转换,如果为0,默认值为1</param>/// <param name="endPageNum">从PDF文档的第几页开始停止转换,如果为0,默认值为pdf总页数</param>       /// <param name="resolution">设置图片的像素,数字越大越清晰,如果为0,默认值为128,建议最大值不要超过1024</param>public string ConvertToImage_PPT(string originFilePath, string imageOutputDirPath, int startPageNum, int endPageNum, int resolution, string Format, string imgUrl){try{//先将文件转换为pdf临时文件string tmpPdfPath = originFilePath.Replace(Format, "pdf");if (Format == ".xls" || Format == ".xlsx" || Format == ".txt"){Workbook wb = new Workbook(originFilePath);wb.Save(tmpPdfPath, SaveFormat.Pdf);}else{Aspose.Slides.Presentation doc = new Aspose.Slides.Presentation(originFilePath);if (doc == null){throw new Exception("ppt文件无效或者ppt文件被加密!");}if (imageOutputDirPath.Trim().Length == 0){imageOutputDirPath = Path.GetDirectoryName(originFilePath);}if (!Directory.Exists(imageOutputDirPath)){Directory.CreateDirectory(imageOutputDirPath);}if (startPageNum <= 0){startPageNum = 1;}if (endPageNum > doc.Slides.Count || endPageNum <= 0){endPageNum = doc.Slides.Count;}if (startPageNum > endPageNum){int tempPageNum = startPageNum; startPageNum = endPageNum; endPageNum = startPageNum;}if (resolution <= 0){resolution = 128;}if (doc != null){doc.Save(tmpPdfPath, Aspose.Slides.Export.SaveFormat.Pdf);}}//再将pdf转换为图片string imgName = ConvertToImage_PDF(tmpPdfPath, imageOutputDirPath, startPageNum, endPageNum, resolution, imgUrl);//删除pdf临时文件
                File.Delete(tmpPdfPath);return imgName;}catch (Exception ex){ErrorHandler.WriteError(ex);return "888";throw;}}/// <summary>/// 将pdf文档转换为图片的方法      /// </summary>/// <param name="originFilePath">pdf文件路径</param>/// <param name="imageOutputDirPath">图片输出路径,如果为空,默认值为pdf所在路径</param>       /// <param name="startPageNum">从PDF文档的第几页开始转换,如果为0,默认值为1</param>/// <param name="endPageNum">从PDF文档的第几页开始停止转换,如果为0,默认值为pdf总页数</param>       /// <param name="resolution">设置图片的像素,数字越大越清晰,如果为0,默认值为128,建议最大值不要超过1024</param>public string ConvertToImage_PDF(string originFilePath, string imageOutputDirPath, int startPageNum, int endPageNum, int resolution, string imgUrl){try{Aspose.Pdf.Document doc = new Aspose.Pdf.Document(originFilePath);if (doc == null){throw new Exception("pdf文件无效或者pdf文件被加密!");}if (imageOutputDirPath.Trim().Length == 0){imageOutputDirPath = Path.GetDirectoryName(originFilePath);}if (!Directory.Exists(imageOutputDirPath)){Directory.CreateDirectory(imageOutputDirPath);}if (startPageNum <= 0){startPageNum = 1;}if (endPageNum > doc.Pages.Count || endPageNum <= 0){endPageNum = doc.Pages.Count;}if (startPageNum > endPageNum){int tempPageNum = startPageNum; startPageNum = endPageNum; endPageNum = startPageNum;}if (resolution <= 0){resolution = 128;}string imageNamePrefix = Path.GetFileNameWithoutExtension(originFilePath);string imgName = string.Empty;for (int i = startPageNum; i <= endPageNum; i++){MemoryStream stream = new MemoryStream();string imgPath = Path.Combine(imageOutputDirPath, imageNamePrefix) + "_" + i.ToString("000") + ".jpg";imgName += imgUrl + "/" + imageNamePrefix + "_" + i.ToString("000") + ".jpg|";Aspose.Pdf.Devices.Resolution reso = new Aspose.Pdf.Devices.Resolution(resolution);Aspose.Pdf.Devices.JpegDevice jpegDevice = new Aspose.Pdf.Devices.JpegDevice(reso, 100);jpegDevice.Process(doc.Pages[i], stream);Image img = Image.FromStream(stream);Bitmap bm = ESBasic.Helpers.ImageHelper.Zoom(img, 0.6f);bm.Save(imgPath, ImageFormat.Jpeg);img.Dispose();stream.Dispose();bm.Dispose();System.Threading.Thread.Sleep(200);}if (!string.IsNullOrEmpty(imgName)){imgName = imgName.Substring(0, imgName.Length - 1);}return imgName;}catch (Exception ex){ErrorHandler.WriteError(ex);throw;}}}
}

到这里就可以完美转换图片了.....

转载于:https://www.cnblogs.com/kksguijiao/articles/9099103.html

PPT转图片解决方案相关推荐

  1. C# PPT转图片的解决方案

    C# PPT转图片的解决方案 参考文章: (1)C# PPT转图片的解决方案 (2)https://www.cnblogs.com/oriental/articles/5787163.html 备忘一 ...

  2. ios开发html转图片,iOS | PPT 转图片(UIImage) 解决方案

    为了实现PPT 转 图片功能, 首先来看下,iOS系统 有哪些API可以实现PPT预览功能; iOS 预览PPT 3种方式: 1. UIWebView / wkwebView 通过 UIWebView ...

  3. Java 批量导出PPT为图片,并合并生成PDF

    Java 批量导出PPT为图片,并合并生成PDF 最近有小伙伴需要把PPT打印,但苦于PPT太多,浪费纸张,所以特别写了这个合并多张PPT到一张A4纸上并生成PDF方便打印的程序: 前期准备 把PPT ...

  4. PPT另存为图片分辨率太低,设置高分辨率(300dpi)

    目录 问题 解决方案 1.下载设置脚本(推荐) 2.使用cmd程序 3.修改注册表 注意事项 问题: PPT另存为图片分辨率太低 解决方案 1.下载设置脚本(推荐) 参考:如何提高PowerPoint ...

  5. deepin-wine-qq无法加载图片解决方案

    deepin-wine-qq无法加载图片解决方案 参考文章: (1)deepin-wine-qq无法加载图片解决方案 (2)https://www.cnblogs.com/crab-in-the-no ...

  6. Android 图片压缩、照片选择、裁剪,上传、一整套图片解决方案

    1.Android一整套图片解决方案 http://mp.weixin.qq.com/s?__biz=MzAxMTI4MTkwNQ==&mid=2650820998&idx=1& ...

  7. 助力全站WebP ,阿里云云上FPGA 团队发布 WebP图片解决方案

    摘要: 阿里云 WebP 图片解决方案的软件部分由联捷计算科技(CTAccel)提供,再整合上阿里云自身的FaaS (FPGA as a Service) 弹性计算平台,形成了完整的阿里云 WebP ...

  8. C#拆分PPT、PPT转视频、PPT转图片

    C#拆分PPT.PPT转视频.PPT转图片 导入dll 1. 拆分PPT 2.PPT转视频 3.PPT转图片 导入dll using Microsoft.Office.Core; using Powe ...

  9. linux下ppt转图片的方法

    上篇介绍了windows上将ppt转换为图片的方法,但是在linux平台上确并无法使用,这里再介绍一下自己开发过程中使用的linux上ppt转图片的方法! 同样的,使用POI会有之前存在的清晰度以及内 ...

最新文章

  1. Objective-C objc_class 介绍
  2. python调用rust_转 从20秒到0.5秒:一个使用Rust语言来优化Python性能的案例
  3. 【注意点分析】1016 Phone Bills (25 分)
  4. 扩展 junit 框架_JUnit 5 –扩展模型
  5. Docker自动构建开发测试平台
  6. HDU-2332 机器人的舞蹈 递推
  7. 问题 A: 编写函数:比较三个数大小 (Append Code)
  8. oracle导入导出多个文件
  9. python切割图片文字_Python+opencv 实现图片文字的分割的方法示例
  10. plsql连接不上64位oracle,PLSQL Developer 不能连接 64位 Oracle 11g 的解决办法
  11. 很无聊但是又很重要的 计算机网络基础知识 ---“互联网协议“
  12. pytorch 安装教程
  13. 测试岗位面试题库---支付功能测试思路有哪些?
  14. WordPress插件教程-WPS Hide Login更改后台登录地址
  15. 【测试】测试执行流程
  16. 张量网络算法基础(七、张量网络中的有效哈密顿思想)
  17. 【LeetCode系列】高楼扔鸡蛋
  18. acr38u PHP调用,ACR38智能卡读写器驱动下载
  19. NWD-Based Model | 小目标检测新范式,抛弃IoU-Based暴力涨点(登顶SOTA)
  20. Oracle数据库如何干净的删除

热门文章

  1. js调用高德地图API接口——返回坐标和省市区地理位置信息
  2. 二次开发 uiautomatorviewer
  3. 对微信公众号JS安全域名的理解
  4. 【教程】如何利用patchrom来编译你自己的MIUI
  5. 足阳明胃经----人的后天之本
  6. 鸽主姓名查询成绩_获奖鸽主姓名,名次及足环号码
  7. ant design DatePicker时间组件 本地中文 发布后变成英文
  8. 解决kettle部署在linux中界面变成英文的问题
  9. 一周新论文 | 2020年第9周 | 自然语言处理相关
  10. 把互联网界的大牛——王煜全老师开出的书单和大家分享一下