使用WebUploader使用,及使用后测试横拍或竖拍图片图片方向不对等解决方案

WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件。在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览器,沿用原来的FLASH运行时,兼容IE6+,iOS 6+, android 4+。两套运行时,同样的调用方式,可供用户任意选用。 采用大文件分片并发上传,极大的提高了文件上传效率。

1、引用脚本及样式

1 <!--引入CSS-->
2 <link rel="stylesheet" type="text/css" href="webuploader文件夹/webuploader.css">
3
4 <!--引入JS-->
5 <script type="text/javascript" src="webuploader文件夹/webuploader.js"></script>
6 <!--引入JS-->
7  <script type="text/javascript" src="js2/jquery-1.10.2.min.js"></script>
8 <!--引入初始化JS及图片上传到文件服务器-->
9 <script type="text/javascript" src="js2/getting-starteder.js"></script>
getting-starteder.js--图片初始化及处理上传到服务器全是靠这个JS来实现

  1 // 图片上传demo
  2 jQuery(function() {
  3     var $ = jQuery,
  4         $list = $(‘#fileList‘),
  5         // 优化retina, 在retina下这个值是2
  6         ratio = window.devicePixelRatio || 1,
  7
  8         // 缩略图大小
  9         thumbnailWidth = 100 * ratio,
 10         thumbnailHeight = 100 * ratio,
 11
 12         // Web Uploader实例
 13         uploader;
 14
 15     // 初始化Web Uploader
 16     uploader = WebUploader.create({
 17
 18     // 自动上传。
 19         auto: true,
 20
 21         // swf文件路径
 22         swf: BASE_URL + ‘/js2/Uploader.swf‘,
 23
 24         // 文件接收服务端。
 25        // server:    ‘http://webuploader.duapp.com/server/fileupload.php‘,
 26         server: ‘Handler/UploadHandleringNew.ashx‘,
 27
 28         // 选择文件的按钮。可选。
 29         // 内部根据当前运行是创建,可能是input元素,也可能是flash.
 30         pick: ‘#filePicker‘,
 31
 32         // 只允许选择文件,可选。
 33         accept: {
 34             title: ‘Images‘,
 35             extensions: ‘gif,jpg,jpeg,bmp,png‘,
 36             mimeTypes: ‘image/*‘
 37         }
 38     });
 39
 40     // 当有文件添加进来的时候
 41     uploader.on( ‘fileQueued‘, function( file ) {
 42         var $li = $(
 43                 ‘<div id="‘ + file.id + ‘" class="file-item thumbnail">‘ +
 44                     ‘<img>‘ +
 45                     ‘<div class="info">‘ + file.name + ‘</div>‘ +
 46                 ‘</div>‘
 47                 ),
 48             $img = $li.find(‘img‘);
 49
 50         $list.append( $li );
 51
 52         // 创建缩略图
 53         uploader.makeThumb( file, function( error, src ) {
 54             if ( error ) {
 55                 $img.replaceWith(‘<span>不能预览</span>‘);
 56                 return;
 57             }
 58
 59             $img.attr( ‘src‘, src );
 60         }, thumbnailWidth, thumbnailHeight );
 61     });
 62
 63     // 文件上传过程中创建进度条实时显示。
 64     uploader.on( ‘uploadProgress‘, function( file, percentage ) {
 65         var $li = $( ‘#‘+file.id ),
 66             $percent = $li.find(‘.progress span‘);
 67
 68         // 避免重复创建
 69         if ( !$percent.length ) {
 70             $percent = $(‘<p class="progress"><span></span></p>‘)
 71                     .appendTo( $li )
 72                     .find(‘span‘);
 73         }
 74
 75         $percent.css( ‘width‘, percentage * 100 + ‘%‘ );
 76     });
 77
 78     // 文件上传成功,给item添加成功class, 用样式标记上传成功。
 79     uploader.on( ‘uploadSuccess‘, function( file ) {
 80         $( ‘#‘+file.id ).addClass(‘upload-state-done‘);
 81     });
 82
 83     // 文件上传失败,现实上传出错。
 84     uploader.on( ‘uploadError‘, function( file ) {
 85         var $li = $( ‘#‘+file.id ),
 86             $error = $li.find(‘div.error‘);
 87
 88         // 避免重复创建
 89         if ( !$error.length ) {
 90             $error = $(‘<div class="error"></div>‘).appendTo( $li );
 91         }
 92
 93         $error.text(‘上传失败‘);
 94     });
 95
 96     // 完成上传完了,成功或者失败,先删除进度条。
 97     uploader.on( ‘uploadComplete‘, function( file ) {
 98     $(‘#‘ + file.id).find(‘.progress‘).remove();
 99     //alert(‘上传成功‘);
100     });
101 });

2、页面上代码:

<!--dom结构部分-->
<div id="uploader-demo">
    <!--用来存放item-->
    <div id="fileList" class="uploader-list"></div>
    <div id="filePicker">选择图片</div>
</div>

我用是NET+ashx

上传后,由于WebUploader后,缩略图的正常,而上传服务器后,横拍的图片显示

如下图:

--上传到服务器后

解决方案:

在上传到服务器之前对图片进行强制转换方向,服务端把 jpeg 的图片纠正一下

根据照片的Exif信息修正

 1 public static void RotateImage(Image img)
 2         {
 3             PropertyItem[] exif = img.PropertyItems;
 4             byte orientation = 0;
 5             foreach (PropertyItem i in exif)
 6             {
 7                 if (i.Id == 274)
 8                 {
 9                     orientation = i.Value[0];
10                     i.Value[0] = 1;
11                     img.SetPropertyItem(i);
12                 }
13             }
14
15             switch (orientation)
16             {
17                 case 2:
18                     img.RotateFlip(RotateFlipType.RotateNoneFlipX);
19                     break;
20                 case 3:
21                     img.RotateFlip(RotateFlipType.Rotate180FlipNone);
22                     break;
23                 case 4:
24                     img.RotateFlip(RotateFlipType.RotateNoneFlipY);
25                     break;
26                 case 5:
27                     img.RotateFlip(RotateFlipType.Rotate90FlipX);
28                     break;
29                 case 6:
30                     img.RotateFlip(RotateFlipType.Rotate90FlipNone);
31                     break;
32                 case 7:
33                     img.RotateFlip(RotateFlipType.Rotate270FlipX);
34                     break;
35                 case 8:
36                     img.RotateFlip(RotateFlipType.Rotate270FlipNone);
37                     break;
38                 default:
39                     break;
40             }
41             foreach (PropertyItem i in exif)
42             {
43                 if (i.Id == 40962)
44                 {
45                     i.Value = BitConverter.GetBytes(img.Width);
46                 }
47                 else if (i.Id == 40963)
48                 {
49                     i.Value = BitConverter.GetBytes(img.Height);
50                 }
51             }
52         }

这样就可以完美解决!!!

Exif specification 对图片方向说明

关于Exif Orientation标志的定义 http://sylvana.net/jpegcrop/exif_orientation.html

UploadHandleringNew.ashx

Value 0th Row 0th Column
1 top left side
2 top right side
3 bottom right side
4 bottom left side
5 left side top
6 right side top
7 right side bottom
8 left side bottom

  1 <%@ WebHandler Language="C#" Class="UploadHandleringNew" %>
  2
  3 using System;
  4 using System.Data;
  5 using System.Configuration;
  6 using System.Collections;
  7 using System.Web;
  8 using System.IO;
  9 using System.Web.Security;
 10 using System.Web.UI;
 11 using System.Web.UI.WebControls;
 12 using System.Web.UI.WebControls.WebParts;
 13 using System.Web.UI.HtmlControls;
 14 using ysw.BLL;
 15 using ysw.Models;
 16 using System.Drawing;
 17
 18 public class UploadHandleringNew : IHttpHandler, System.Web.SessionState.IRequiresSessionState
 19 {
 20     public string camera = String.Empty;//机型
 21     public string focalLength = String.Empty;//焦距
 22     public string shutterSpeed = String.Empty;//速度
 23     public string aperture = String.Empty;//光圈
 24     public string iso = String.Empty;//感光度
 25     public string treePath = System.Web.HttpContext.Current.Server.MapPath("~/");
 26     public void ProcessRequest(HttpContext context)
 27     {
 28         context.Response.ContentType = "text/plain";
 29         context.Response.Charset = "utf-8";
 30         context.Response.ContentEncoding = System.Text.Encoding.UTF8;
 31         System.Collections.Generic.IList<TempImages> list = new System.Collections.Generic.List<TempImages>();
 32         if (context.Session["TempImageList"] != null)
 33         {
 34             list = context.Session["TempImageList"] as System.Collections.Generic.IList<TempImages>;
 35         }
 36
 37         if (list.Count >= 6)
 38         {
 39             context.Response.Write("上传数量已经超出系统限制的6个文件");
 40             return;
 41
 42
 43         }
 44         else
 45         {
 46             HttpPostedFile file = context.Request.Files[0];
 47             string uploadPath = HttpContext.Current.Server.MapPath(@context.Request["folder"]) + "\\";
 48
 49             if (file != null)
 50             {
 51                 if (!System.IO.Directory.Exists(uploadPath))
 52                 {
 53                     System.IO.Directory.CreateDirectory(uploadPath);
 54                 }
 55                 Random random = new Random();
 56                 string fileName = DateTime.Now.ToString("yyyy-MM-dd") + "-" + random.Next(999999999) + file.FileName.Substring(file.FileName.Length - 4);     // 文件名称
 57                 string fileName_s = "x_" + fileName;      // 缩略图文件名称
 58                 string fileName_syp = "water_" + fileName; // 水印图文件名称(图片)
 59                 string webFilePath = "";
 60                 string webFilePath_s = "";
 61                 string webFilePath_s1 = "";
 62                 string webFilePath_syp = "";
 63                 webFilePath = treePath + @"originalImages\" + fileName;   // 服务器端文件路径
 64                 webFilePath_s = treePath + @"thumbnails\" + fileName_s; // 服务器端缩略图路径
 65                 webFilePath_syp = treePath + @"waterImages\" + fileName_syp; // 服务器端带水印图路径(图片)
 66                 webFilePath_s1 = treePath + @"thumbnails166\" + fileName_s; // 服务器端缩略图路径
 67                 string webFilePath_sypf = System.Web.HttpContext.Current.Server.MapPath(@"~/images/synew.png");      // 服务器端水印图路径(图片)
 68                 file.SaveAs(webFilePath);
 69
 70
 71
 72
 73                 AddWaterPic(webFilePath, webFilePath_syp, webFilePath_sypf);//生成图片水印图
 74
 75                 int towidth = 0;
 76                 int toheight = 0;
 77                 //MakeImage1(webFilePath, webFilePath_syp, 500);
 78                 MakeImage(webFilePath, webFilePath_s, 235);
 79                 //将临时数据保存到临时表中
 80                 TempImages tempImage = new TempImages();
 81                 tempImage.ISBN = fileName;
 82                 if (context.Session["UserInfo"] != null)
 83                 {
 84                     tempImage.UserId = (context.Session["UserInfo"] as ysw.Model.UserInfo).Id;
 85                 }
 86                 else
 87                 {
 88                     tempImage.UserId = 2;
 89                 }
 90
 91                 tempImage.CreateTime = DateTime.Now;
 92                 tempImage.Id = TempImageManager.AddTempImages(tempImage);
 93                 if (tempImage.Id > 0)
 94                 {
 95                     list.Add(tempImage);
 96                     context.Session["TempImageList"] = list;
 97                     string str = "waterImages/" + fileName_syp + ",thumbnails/" + fileName_s + "," + camera + "," + focalLength + "," + shutterSpeed + "," + aperture + "," + iso;
 98                     //上传成功后让上传队列的显示自动消失
 99                     //string str = fileName + ",";
100                     //int toheight1 = 90;
101                     // int towidth1 = 90;
102                     // if ((double)towidth >(double)toheight)
103                     // {
104                     //     toheight1 = toheight * 90 / towidth;
105                     // }
106                     // else
107                     // {
108                     //     towidth1 = towidth * 90 / toheight;
109                     // }
110                     // str += towidth1 + "," + toheight1;
111                     context.Response.Write(str);
112                 }
113                 else
114                 {
115                     context.Response.Write("0");
116                 }
117             }
118             else
119             {
120                 context.Response.Write("0");
121             }
122         }
123     }
124     public static void rotating(string Path_syp)
125     {
126         System.Drawing.Image img = System.Drawing.Image.FromFile(Path_syp);
127
128         System.Drawing.Imaging.PropertyItem[] exif = img.PropertyItems;
129         byte orientation = 0;
130         foreach (System.Drawing.Imaging.PropertyItem i in exif)
131         {
132             if (i.Id == 274)
133             {
134                 orientation = i.Value[0];
135                 i.Value[0] = 1;
136                 img.SetPropertyItem(i);
137             }
138         }
139
140         switch (orientation)
141         {
142             case 2:
143                 img.RotateFlip(RotateFlipType.RotateNoneFlipX);
144                 break;
145             case 3:
146                 img.RotateFlip(RotateFlipType.Rotate180FlipNone);
147                 break;
148             case 4:
149                 img.RotateFlip(RotateFlipType.RotateNoneFlipY);
150                 break;
151             case 5:
152                 img.RotateFlip(RotateFlipType.Rotate90FlipX);
153                 break;
154             case 6:
155                 img.RotateFlip(RotateFlipType.Rotate90FlipNone);
156                 break;
157             case 7:
158                 img.RotateFlip(RotateFlipType.Rotate270FlipX);
159                 break;
160             case 8:
161                 img.RotateFlip(RotateFlipType.Rotate270FlipNone);
162                 break;
163             default:
164                 break;
165
166         }
167         foreach (System.Drawing.Imaging.PropertyItem i in exif)
168         {
169             if (i.Id == 40962)
170             {
171                 i.Value = BitConverter.GetBytes(img.Width);
172             }
173             else if (i.Id == 40963)
174             {
175                 i.Value = BitConverter.GetBytes(img.Height);
176             }
177         }
178
179
180         //System.Drawing.Image bitmap = new System.Drawing.Bitmap(500, 500);
181
182         //System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);
183
184
185         //    //以jpg格式保存缩略图
186         //    bitmap.Save(Path_syp, System.Drawing.Imaging.ImageFormat.Jpeg);
187
188         //    //image.Dispose();
189         //    bitmap.Dispose();
190         //    g.Dispose();
191
192     }
193     /// <summary>
194     /// 生成缩略图方法(700px图片)
195     /// </summary>
196     /// <param name="webFilePath"></param>
197     /// <param name="webFilePath_s"></param>
198     /// <param name="size"></param>
199     private static void MakeImage1(string webFilePath, string webFilePath_s, int size)
200     {
201         System.Drawing.Image image = System.Drawing.Image.FromFile(webFilePath);
202         int towidth = size;
203         int toheight = size;
204         int x = 0;
205         int y = 0;
206         int ow = image.Width;
207         int oh = image.Height;
208         toheight = image.Height * size / image.Width;
209         System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);              //新建一个画板
210         System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);              //设置高质量插值法
211         g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;              //设置高质量,低速度呈现平滑程度
212         g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;              //清空画布并以透明背景色填充
213         g.Clear(System.Drawing.Color.Transparent);              //在指定位置并且按指定大小绘制原图片的指定部分
214         g.DrawImage(image, new System.Drawing.Rectangle(0, 0, towidth, toheight), new System.Drawing.Rectangle(x, y, ow, oh), System.Drawing.GraphicsUnit.Pixel);
215         g.Dispose();
216         bitmap.Save(webFilePath_s, System.Drawing.Imaging.ImageFormat.Jpeg);
217         image.Dispose();
218     }
219     /// <summary>
220     /// 生成缩略图
221     /// </summary>
222     /// <param name="webFilePath">原图的路径</param>
223     /// <param name="webFilePath_s">缩略图的路径</param>
224     /// <param name="size">缩略图的大小</param>
225     public static void MakeImage(string webFilePath, string webFilePath_s, int size)
226     {
227         System.Drawing.Image image = System.Drawing.Image.FromFile(webFilePath);
228         int towidth = size;
229         int toheight = size;
230         int x = 0;
231         int y = 0;
232         int ow = image.Width;
233         int oh = image.Height;
234
235         if ((double)image.Width / (double)image.Height > (double)towidth / (double)toheight)
236         {
237             oh = image.Height;
238             ow = image.Height * towidth / toheight;
239             y = 0;
240             x = 0;
241         }
242         else
243         {
244             ow = image.Width;
245             oh = image.Width * toheight / towidth;
246             x = 0;
247             y = 0;
248         }
249         System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);              //新建一个画板
250         System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);              //设置高质量插值法
251         g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;              //设置高质量,低速度呈现平滑程度
252         g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;              //清空画布并以透明背景色填充
253         g.Clear(System.Drawing.Color.Transparent);              //在指定位置并且按指定大小绘制原图片的指定部分
254         g.DrawImage(image, new System.Drawing.Rectangle(0, 0, towidth, toheight), new System.Drawing.Rectangle(x, y, ow, oh), System.Drawing.GraphicsUnit.Pixel);
255         try
256         {
257             //以jpg格式保存缩略图
258             bitmap.Save(webFilePath_s, System.Drawing.Imaging.ImageFormat.Jpeg);
259         }
260         catch (System.Exception e)
261         {
262             throw e;
263         }
264         finally
265         {
266             image.Dispose();
267             bitmap.Dispose();
268             g.Dispose();
269         }
270     }
271     /// <summary>
272     /// 生成水印缩略图
273     /// </summary>
274     /// <param name="Path"></param>
275     /// <param name="Path_syp"></param>
276     /// <param name="Path_sypf"></param>
277     protected void AddWaterPic(string Path, string Path_syp, string Path_sypf)
278     {
279         System.Drawing.Image image = System.Drawing.Image.FromFile(Path);
280         System.Drawing.Image copyImage = System.Drawing.Image.FromFile(Path_sypf);
281
282
283
284
285
286
287         System.Drawing.Imaging.PropertyItem[] exif = image.PropertyItems;
288         byte orientation = 0;
289         foreach (System.Drawing.Imaging.PropertyItem i in exif)
290         {
291             if (i.Id == 274)
292             {
293                 orientation = i.Value[0];
294                 i.Value[0] = 1;
295                 image.SetPropertyItem(i);
296             }
297         }
298
299         switch (orientation)
300         {
301             case 2:
302                 image.RotateFlip(RotateFlipType.RotateNoneFlipX);
303                 break;
304             case 3:
305                 image.RotateFlip(RotateFlipType.Rotate180FlipNone);
306                 break;
307             case 4:
308                 image.RotateFlip(RotateFlipType.RotateNoneFlipY);
309                 break;
310             case 5:
311                 image.RotateFlip(RotateFlipType.Rotate90FlipX);
312                 break;
313             case 6:
314                 image.RotateFlip(RotateFlipType.Rotate90FlipNone);
315                 break;
316             case 7:
317                 image.RotateFlip(RotateFlipType.Rotate270FlipX);
318                 break;
319             case 8:
320                 image.RotateFlip(RotateFlipType.Rotate270FlipNone);
321                 break;
322             default:
323                 break;
324
325         }
326         foreach (System.Drawing.Imaging.PropertyItem i in exif)
327         {
328             if (i.Id == 40962)
329             {
330                 i.Value = BitConverter.GetBytes(image.Width);
331             }
332             else if (i.Id == 40963)
333             {
334                 i.Value = BitConverter.GetBytes(image.Height);
335             }
336         }
337
338
339
340
341
342         int towidth = 500;
343         int toheight = 500;
344         int x = 0;
345         int y = 0;
346         int ow = image.Width;
347         int oh = image.Height;
348         if (image.Width < 500 )
349         {
350             toheight = image.Height;
351             towidth = image.Width;
352         }
353         else
354         {
355             towidth = 500;
356             toheight = image.Height * 500 / image.Width;
357
358         }
359         //rotating(Path);
360
361         System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);
362         System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);
363
364         g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;              //设置高质量,低速度呈现平滑程度
365         g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;              //清空画布并以透明背景色填充
366         g.Clear(System.Drawing.Color.Transparent);              //在指定位置并且按指定大小绘制原图片的指定部分
367         g.DrawImage(image, new System.Drawing.Rectangle(0, 0, towidth, toheight), new System.Drawing.Rectangle(x, y, ow, oh), System.Drawing.GraphicsUnit.Pixel);
368
369         g.DrawImage(copyImage, new System.Drawing.Rectangle(bitmap.Width - 10 - copyImage.Width, bitmap.Height - 8 - copyImage.Height, copyImage.Width, copyImage.Height), 0, 0, copyImage.Width, copyImage.Height, System.Drawing.GraphicsUnit.Pixel);
370         g.Dispose();
371
372         bitmap.Save(Path_syp);
373         image.Dispose();
374     }
375     public bool IsReusable {
376         get {
377             return false;
378         }
379     }
380
381 }

时间: 2024-11-09 01:00:40

使用WebUploader使用,及使用后测试横拍或竖拍图片图片方向不对等解决方案的相关文章

程序猿之---C语言细节11(数组下标越界后测试、数组下标中“ ,”运算符,副作用)

主要内容:数组下标越界后测试.数组下标中" ,"运算符,副作用 #include <stdio.h> int main(int argc, char ** argv) { int a[2]={1,2},b[2] = {3,4};//输出未知值 int i = 0; printf("%d\n",b[0,2]); //逗号为一种运算符,b[0,2]被当成b[2],在这里b[2]是超出 // 了下标,但是输出为1,是a[0]的值(通过改变a[0]的值输出也改变

【Block-Level Verification】 芯片开发通识_验证目标_ 验证语言_ 验证职业前景 _挑战和瓶颈_验证周期_功能描述文档_验证计划_回归测试_硅后测试_逃逸分析

SystemVerilog验证通识 1. 芯片开发概述 不同于通用电路,专用集成电路为了专门解决或者优化相关工程问题,例如专用算法的电路实现,如芯片里加入人工智能处理单元,为CPU\GPU减负,目的是提高应用效率和降低能耗. 芯片体积有多大?2017年5月 一款芯片采用12nm FFN 工艺,核心面积为惊人的815平方mm,一共包含211亿个晶体管.大于10亿门为大型SOC,现在非常多,一款4G 芯片大约为40-50亿门. 28nm流片价格为 200万美金,14nm double,7nm dou

iOS 测试在应用发布前后的痛点探索以及解决方案

作者-芈 峮 前言 iOS 开发从 2010 年开始在国内不断地升温,开发和测试相关的问题不绝于耳.iOS 测试主要涉及哪些内容?又有哪些挑战呢?带着疑问我们开始第一个大问题的讨论. iOS 测试的范围和可能遇到的挑战 iOS 测试范围 一般来说,每一个 iOS 应用的背后都会有一些后台服务.后台服务会给 iOS 应用提供丰富的数据和精彩的内容,后台服务的测试必须要包含在 iOS 测试中.当然,本文主要讨论一些 iOS 测试领域的内容,后台服务的测试在此就直接掠过.因此,下文提到的 iOS 测试

真机测试时个别机型无法显示toast的问题解决方案

真机测试时个别机型toast信息不显示,找到两个解决方案,不知还有什么其它有效方法,期待大神们的分享!!! 1.手动方案:设置-->应用软件管理-->对应APP-->勾选显示通知框 2.替代方案:避免toast被拦截,可以考虑用alert dialog来显示需要的信息 public static void forceUpdate() { Log.i(TAG, "forceUpdate"); // UmengUpdateAgent.forceUpdate(mActivi

更新windows10系统PS无法打开,安装PS软件后无法直接拖动图片到ps里面的解决方案

我的分享:学设计的需要用到PS多边形特效的可以看看我制作的软件"多边形特效生成器"(点击查看)  最近很多学生在学习我的PS课程的时候经常会问了我这样的问题,一个是win10系统打不开ps了,还有就是Windows10安装PS软件后无法直接拖动图片到ps里面,只能打开PS软件后,点击  文件---打开  进行图片的载入. 那么先回答第一个问题:关于windows10打开Photoshop出现错误 windows10安装Adobe Photoshop后双击打开显示错误Error:16,错

Win7升级win10后硬盘(分区)访问被拒绝,无法访问的解决方案

Win7升级win10后硬盘(分区)访问被拒绝,无法访问的解决方案 转载请注明出处:http://blog.csdn.net/aaa123524457/article/details/47306407 昨天终于收到微软的升级win10升级包推送信息,于是就迫不及待的更新了!过程还挺顺利,系统升级好后,本以为会把我的另一个硬盘系统给搞乱,却没想到微软反而给我弄了个看起来非常高大上的双系统启动菜单,而且两个系统都能正常运行(可以看我的另一篇关于升级的备忘). http://blog.csdn.net

chart接入后台数据后vue不响应式显示图片

chart接入后台数据后vue不响应式显示图片 watch: { //观察option的变化 config: { handler(newVal, oldVal) { if (this.chart) { if (newVal) { this.chart.setOption(newVal); } else { this.chart.setOption(oldVal); } } else { this.init(); } }, deep: true //对象内部属性的监听,关键. } }, 完整的ch

android单元测试 activity跳转 以及 input 输入后 测试

Android junit实现多个Activity跳转测试 分类: Android Junit测试2011-11-14 16:49 1601人阅读 评论(2) 收藏 举报 androidjunitlayout测试单元测试exception 测试相关资源 让开发自动化: 用 Eclipse 插件提高代码质量http://www.ibm.com/developerworks/cn/java/j-ap01117/index.html 代码测试覆盖率介绍:http://www.cnblogs.com/c

iOS_项目完成后测试app

在项目中遇到各种问题: (1)thread 1:exc_bad_access(code=1,address=0x10) 完全不知道错误出现在哪里. 错误原因: exc_bad_access(code=1, address=0x789870)野指针错误,主要的原因是,当某个对象被完全释放,也就是retainCount,引用计数为0后.再去通过该对象去调用其它的方法就会出现野指针错误. 例如: Person *jerry = [[Person alloc]init]; // retainCount引