问题描述
对图片进行水印加密(图片或文字),加密后不可见,已经加密成功了,可是我要如何提取出来??求大侠指导
解决方案
解决方案二:
你都会加密了,不会提取?从你的这个描述,谁能看出你是怎么加密的呢?
解决方案三:
///<summary>///加图片水印///</summary>///<paramname="img">要加水印的原图(System.Drawing)</param>///<paramname="filename">文件名</param>///<paramname="watermarkFilename">水印文件名</param>///<paramname="watermarkStatus">图片水印位置1=左上2=中上3=右上4=左中5=中中6=右中7=左下8=右中9=右下</param>///<paramname="quality">加水印后的质量0~100,数字越大质量越高</param>///<paramname="watermarkTransparency">水印图片的透明度1~10,数字越小越透明,10为不透明</param>publicstaticImageImageWaterMarkPic(Imageimg,stringfilename,stringwatermarkFilename,intwatermarkStatus,intquality,intwatermarkTransparency){Graphicsg=Graphics.FromImage(img);//设置高质量插值法//g.InterpolationMode=System.Drawing.Drawing2D.InterpolationMode.High;//设置高质量,低速度呈现平滑程度//g.SmoothingMode=System.Drawing.Drawing2D.SmoothingMode.HighQuality;Imagewatermark=newBitmap(watermarkFilename);//如果水印的图片比原图片大,则退出//if(watermark.Height>=img.Height||watermark.Width>=img.Width)//{//returnimg;//}ImageAttributesimageAttributes=newImageAttributes();ColorMapcolorMap=newColorMap();colorMap.OldColor=System.Drawing.Color.FromArgb(255,0,255,0);colorMap.NewColor=System.Drawing.Color.FromArgb(0,0,0,0);ColorMap[]remapTable={colorMap};imageAttributes.SetRemapTable(remapTable,ColorAdjustType.Bitmap);//设置透明度floattransparency=0.5F;if(watermarkTransparency>=1&&watermarkTransparency<=10)transparency=(watermarkTransparency/10.0F);float[][]colorMatrixElements={newfloat[]{1.0f,0.0f,0.0f,0.0f,0.0f},newfloat[]{0.0f,1.0f,0.0f,0.0f,0.0f},newfloat[]{0.0f,0.0f,1.0f,0.0f,0.0f},newfloat[]{0.0f,0.0f,0.0f,transparency,0.0f},newfloat[]{0.0f,0.0f,0.0f,0.0f,1.0f}};ColorMatrixcolorMatrix=newColorMatrix(colorMatrixElements);imageAttributes.SetColorMatrix(colorMatrix,ColorMatrixFlag.Default,ColorAdjustType.Bitmap);intxpos=0;intypos=0;switch(watermarkStatus){case1:xpos=(int)(img.Width*(float).01);ypos=(int)(img.Height*(float).01);break;case2:xpos=(int)((img.Width*(float).50)-(watermark.Width/2));ypos=(int)(img.Height*(float).01);break;case3:xpos=(int)((img.Width*(float).99)-(watermark.Width));ypos=(int)(img.Height*(float).01);break;case4:xpos=(int)(img.Width*(float).01);ypos=(int)((img.Height*(float).50)-(watermark.Height/2));break;case5:xpos=(int)((img.Width*(float).50)-(watermark.Width/2));ypos=(int)((img.Height*(float).50)-(watermark.Height/2));break;case6:xpos=(int)((img.Width*(float).99)-(watermark.Width));ypos=(int)((img.Height*(float).50)-(watermark.Height/2));break;case7:xpos=(int)(img.Width*(float).01);ypos=(int)((img.Height*(float).99)-watermark.Height);break;case8:xpos=(int)((img.Width*(float).50)-(watermark.Width/2));ypos=(int)((img.Height*(float).99)-watermark.Height);break;case9:xpos=(int)((img.Width*(float).99)-(watermark.Width));ypos=(int)((img.Height*(float).99)-watermark.Height);break;}g.DrawImage(watermark,newRectangle(xpos,ypos,watermark.Width,watermark.Height),0,0,watermark.Width,watermark.Height,GraphicsUnit.Pixel,imageAttributes);ImageCodecInfo[]codecs=ImageCodecInfo.GetImageEncoders();ImageCodecInfoici=null;foreach(ImageCodecInfocodecincodecs){if(codec.MimeType.IndexOf("jpeg")>-1)ici=codec;}EncoderParametersencoderParams=newEncoderParameters();long[]qualityParam=newlong[1];if(quality<0||quality>100)quality=80;qualityParam[0]=quality;EncoderParameterencoderParam=newEncoderParameter(System.Drawing.Imaging.Encoder.Quality,qualityParam);encoderParams.Param[0]=encoderParam;if(ici!=null)img.Save(filename,ici,encoderParams);elseimg.Save(filename);returnimg;g.Dispose();img.Dispose();watermark.Dispose();imageAttributes.Dispose();}
这个就是水印的代码,也不是我自己写的,网络上找的
解决方案四:
你这哪是什么加密,完全就只是加了一个水印而已加了水印然后保存成jpeg的格式,然后呢?你保存出来的就是一个image啊你是说这个image打不开?还是去除这个image中的水印?
解决方案五:
image可以正常打开,我现在是要从image中提取出我水印的图片,这个我不会
解决方案六:
引用4楼u010289468的回复:
image可以正常打开,我现在是要从image中提取出我水印的图片,这个我不会
哦,这个我也不会。。。
解决方案七:
网络上找了很多,都没找到可以用的。求大侠现身指导
解决方案八:
给你个思路,不知道可行不可行呀。你查看某种类型的图片的构成,比如jpeg,查看它的格式定义中有没有预留字段。然后你把你的信息写到图片的预留字段中。当然,前提是你要存的信息比较少,另外,这个图片是内部流转的。
解决方案九:
说的啥东西啊。。。