照片修改源码
黑白照片转化为彩色matlab代码
黑白照片转化为彩色matlab代码黑白照片转化为彩色是一项有趣且具有挑战性的任务。
在这个过程中,我们需要使用一些图像处理技术来还原照片的原始色彩。
本文将介绍一种基于Matlab的简单方法来实现这个目标。
我们需要加载待处理的黑白照片。
在Matlab中,可以使用imread 函数来读取图像文件。
例如,我们可以使用以下代码加载名为"bw_image.jpg"的黑白照片:```matlabbw_image = imread('bw_image.jpg');```接下来,我们将使用一些图像处理技术来将黑白照片转化为彩色。
一种常用的方法是通过颜色空间转换来实现。
在Matlab中,我们可以使用rgb2gray函数将彩色图像转换为灰度图像,然后使用gray2rgb函数将灰度图像转换回彩色图像。
以下是实现这个过程的代码:```matlabgray_image = rgb2gray(bw_image);color_image = gray2rgb(gray_image);```这样,我们就可以获得了一张彩色的图像。
然而,这种方法只是简单地将灰度信息复制到了RGB通道,效果可能并不理想。
为了改善结果,我们可以尝试其他更复杂的图像处理技术,例如图像增强或色彩补偿算法。
这些算法可以根据图像的内容和特征来调整颜色分布,以使图像看起来更加自然和生动。
除了使用内置的图像处理函数,我们还可以自定义一些算法来实现黑白照片转化为彩色。
例如,我们可以根据图像的纹理和结构信息来估计缺失的颜色信息。
这种方法需要一些先验知识和图像分析技术,但可以获得更好的结果。
黑白照片转化为彩色是一个有趣且具有挑战性的任务。
在Matlab中,我们可以使用一些内置的图像处理函数来实现这个目标,也可以尝试自定义算法来改进结果。
无论采用何种方法,我们都可以通过将灰暗的过去变为绚丽多彩的现在,使照片更加生动和有趣。
psd源码怎么修改
QQ空间psd源文件修改
近来发现很多朋友不会修改psd源文件,下载了QQ空间psd源码却是别人的资料和名字那个着急哦,到百度找也都是一些视频,模糊的很呀,基本没有文字教程,于是写个qq 空间psd源文件修改给大,希望大家都会使用psd,装扮上漂亮的QQ空间。
第一步:下载好ps软件(也就是photoshop)没有的请去下载:
第二步:psd源文件,也就是psd源码,没有好看源码的童鞋可以去挑一挑。
第三步:打开ps-左上角文件-打开-选择下载的psd源文件
第四步:如果出现这个提示,请直接确定即可。
第五步:打开图片会有点下,填写100比例就是原始大小
第六步:点击左右ps下面的选择键;
第七步:按住键盘ctrl+鼠标左键,点击你想修改的位置。
第八步:右边自动跳转到我们要修改的图层,就是前面带“T”的文字图层,我们双击前边的T
字,然后输入自己的修改就好啦!修改好点击图片任意位置才会显示出来
第九步:保存修改好的图片,左上角-文件-储存为-选择好gif格式-直接选确定就好了哦
此教程由唯爱qq社区提供,欢迎喜欢玩QQ的同学加入~ 唯爱=vi 我们的网址。
图片代码转换器
图片代码转换器1. 简介图片代码转换器是一种方便快捷将图片文件转换为代码表示的工具。
它可以将图片文件的二进制数据转换为包含代码的文本,以便在程序中使用。
2. 功能和特点2.1 图片转代码图片代码转换器主要功能是将图片文件转换为代码表示。
用户可以选择图片文件并指定生成的代码格式,例如C++、Python、HTML等。
转换后的代码可以在程序中直接使用,无需再加载外部图片文件。
2.2 代码转图片除了将图片转换为代码表示,图片代码转换器还提供了将代码转换回图片的功能。
用户可以输入代码,并选择生成的图片格式,例如PNG、JPEG、GIF等。
生成的图片可以保存到本地或直接显示在软件界面上。
2.3 多种代码格式支持图片代码转换器支持多种代码格式,以满足不同开发环境的需求。
用户可以根据自己的项目需要选择生成的代码格式,方便地引用图片资源。
2.4 图片预览和编辑该工具还提供了图片预览和编辑功能。
用户可以在转换前预览原始图片,并进行一些简单的编辑操作,例如裁剪、旋转、调整亮度等。
这样可以确保转换后的图片效果符合预期。
3. 使用指南3.1 安装和启动图片代码转换器可以通过官方网站下载并安装。
安装完成后,点击软件图标即可启动转换器。
3.2 图片转代码1.打开图片代码转换器。
2.点击菜单中的“图片转代码”选项。
3.在弹出的对话框中,选择要转换的图片文件。
4.选择生成的代码格式,例如Python。
5.点击“转换”按钮开始转换。
6.转换完成后,可将生成的代码复制到剪贴板,或保存为文件。
3.3 代码转图片1.打开图片代码转换器。
2.点击菜单中的“代码转图片”选项。
3.在弹出的对话框中,输入要转换的代码。
4.选择生成的图片格式,例如JPEG。
5.点击“转换”按钮开始转换。
6.转换完成后,可将生成的图片保存到本地,或直接在软件界面上预览。
3.4 图片预览和编辑1.打开图片代码转换器。
2.点击菜单中的“图片预览”选项。
3.在弹出的对话框中,选择要预览和编辑的图片文件。
使用PHP扩展php imagick对图片改变大小、旋转、锐化、减色或增加特效
使用PHP扩展php_imagick对图片改变大小、旋转、锐化、减色或增加特效php_imagick是PHP对图片处理的一个扩展包,可以完成对图片改变大小、旋转、锐化、减色或增加特效等操作。
一、windows下安装Imagick扩展:1、下载 ImageMagick并安装http://image_/image_magick/binaries/ImageMagick-6.6.2-10-Q16-windows -dll.exe2、下载php_imagick.dll/outside-blog-content/imagick-windows-builds/php53/imagick-2.3.0-dev/ vc9_nts/php_imagick.dll如果你用的是线程安全的php,请下载/outside-blog-content/imagick-windows-builds/php53/imagick-2.3.0-dev/vc9_zts/php_imagick.dll3、设置在php.ini中添加extension=php_imagick.dll ,重启web server二、linux下安装Imagick扩展:1.yum安装ImageMagickyum install ImageMagick ImageMagick-devel2.测试是否安装成功convert -version3.安装imagick扩展wget /get/imagick-3.1.0RC2.tgztar xzvf imagick-3.1.0RC2.tgzcd imagick-3.1.0RC2phpize./configuremakemake install4.编辑php.ini文件,在文件末尾添加如下代码extension=imagick.so5. 重新启动apache服务器service httpd restart三、案例1. 边框处理//by header('Content-type: image/jpeg');$image = new Imagick('test.jpg');$color=new ImagickPixel();$color->setColor("rgb(220,220,220)");$image->borderImage($color,5,4);$image->blurImage(5,5,imagick::CHANNEL_GREEN);echo $image;(PS:php Q扣峮:276167802,验证:wk)2.生成缩略图//by header('Content-type: image/jpeg');$image = new Imagick('test.jpg');$image->thumbnailImage(50, 0);echo $image;来源:清源教育。
人像php换衣服源码
人像php换衣服源码1. 什么是人像php换衣服源码人像php换衣服源码是一种基于PHP语言开发的应用程序,用于实现在人像照片中更换衣服的功能。
通过该源码,用户可以将指定的衣服图案或颜色应用到人像照片上,实现虚拟试衣的效果。
2. 源码实现原理人像php换衣服源码的实现原理主要包括以下几个步骤:1.图片上传:用户将包含人像的照片上传到服务器。
2.图片处理:服务器使用GD库或其他图像处理库对上传的照片进行处理,提取人像区域并进行分割。
3.衣服图案选择:用户可以从已有的衣服图案库中选择一款衣服图案或颜色。
4.衣服图案处理:服务器将选中的衣服图案或颜色与人像照片进行合成,保留人像区域并将衣服图案应用到对应位置。
5.图片输出:服务器将处理后的图片输出给用户,用户可以保存或分享处理后的照片。
3. 源码开发技术和工具人像php换衣服源码的开发通常使用以下技术和工具:•PHP:作为源码的主要开发语言,用于实现服务器端的逻辑处理和图像处理。
•GD库:作为PHP的图像处理库,用于对照片进行处理、分割和合成。
•HTML/CSS/JavaScript:用于实现用户界面和与用户的交互。
•MySQL:作为数据库,用于存储用户上传的照片和衣服图案信息。
•Apache/Nginx:作为Web服务器,用于部署和运行源码。
4. 源码开发步骤人像php换衣服源码的开发可以按照以下步骤进行:1.确定需求:明确源码的功能和用户需求,确定要实现的功能模块和界面设计。
2.数据库设计:设计数据库表结构,包括用户信息、照片信息、衣服图案信息等。
3.服务器端开发:使用PHP开发服务器端的逻辑处理和图像处理功能,包括图片上传、处理、合成和输出等。
4.前端开发:使用HTML/CSS/JavaScript开发用户界面,包括图片上传界面、衣服图案选择界面等。
5.数据库操作:使用PHP连接数据库,进行用户信息和照片信息的存储和查询。
6.测试和调试:对源码进行测试,修复bug,确保功能正常运行。
批量处理图片宏代码
ActiveDocument.Shapes(n).Width = 5 '
Next n
End Sub
代码4 不锁纵横比 (这个有效。代码同2)
Sub setpicsize() 'Resume Next '
ActiveDocument.InlineShapes(n).LockAspectRatio = msoFalse '
ActiveDocument.InlineShapes(n).Height = 320 '
ActiveDocument.InlineShapes(n).Width = 425 '/经调试后,此处高度和宽度必须很宽,代码内分度值为像素,并非厘米,因为Inline的缘故?/
ActiveDocument.InlineShapes(n).Width =5 *28.35 '/同上,前面的3.5和5.5可以理解为像素/
Next n
End Sub
代码5 仅仅解除纵横比
Sub () '
Dim n '
On Error Resume Next '
For n = 1 To ActiveDocument.InlineShapes.Count 'InlineShapes
'iShape.Width = CentimetersToPoints(15)
Next
End Sub
代码2 不锁定纵横比 (有效)
Sub setpicsize() '
Dim n '
BMP图片转JPEG图片C程序源代码
// A BMP truecolor to JPEG encoder// Copyright 1999 Cristian Cuturicu #include <stdio.h>#include <stdlib.h>#include <string.h>#include "jtypes.h"#include "jglobals.h"#include "jtables.h"void write_APP0info()//Nothing to overwrite for APP0info{writeword(APP0info.marker);writeword(APP0info.length);writebyte('J');writebyte('F');writebyte('I');writebyte('F');writebyte(0);writebyte(APP0info.versionhi);writebyte(APP0info.versionlo);writebyte(APP0info.xyunits);writeword(APP0info.xdensity);writeword(APP0info.ydensity);writebyte(APP0info.thumbnwidth);writebyte(APP0info.thumbnheight);}void write_SOF0info()// We should overwrite width and height{writeword(SOF0info.marker);writeword(SOF0info.length);writebyte(SOF0info.precision);writeword(SOF0info.height);writeword(SOF0info.width);writebyte(SOF0info.nrofcomponents);writebyte(SOF0info.IdY);writebyte(SOF0info.HVY);writebyte(SOF0info.QTY);writebyte(SOF0info.IdCb);writebyte(SOF0info.HVCb);writebyte(SOF0info.QTCb);writebyte(SOF0info.IdCr);writebyte(SOF0info.HVCr);writebyte(SOF0info.QTCr);}void write_DQTinfo(){BYTE i;writeword(DQTinfo.marker);writeword(DQTinfo.length);writebyte(DQTinfo.QTYinfo);for (i=0; i<64; i++)writebyte(DQTinfo.Ytable[i]);writebyte(DQTinfo.QTCbinfo);for (i=0; i<64; i++)writebyte(DQTinfo.Cbtable[i]);}void set_quant_table(BYTE *basic_table, BYTE scale_factor, BYTE *newtable)// Set quantization table and zigzag reorder it{BYTE i;long temp;for (i=0; i<64; i++){temp = ((long) basic_table[i] * scale_factor + 50L) / 100L;// limit the values to the valid rangeif (temp <= 0L)temp = 1L;if (temp > 255L)temp = 255L;newtable[zigzag[i]] = (BYTE) temp;}}void set_DQTinfo(){BYTE scalefactor = 50;// scalefactor controls the visual quality of the image// the smaller is the better image we'll get, and the smaller// compression we'll achieveDQTinfo.marker = 0xFFDB;DQTinfo.length = 132;DQTinfo.QTYinfo = 0;DQTinfo.QTCbinfo = 1;set_quant_table(std_luminance_qt, scalefactor, DQTinfo.Ytable);set_quant_table(std_chrominance_qt, scalefactor, DQTinfo.Cbtable);}void write_DHTinfo(){BYTE i;writeword(DHTinfo.marker);writeword(DHTinfo.length);writebyte(DHTinfo.HTYDCinfo);for (i=0; i<16; i++)writebyte(DHTinfo.YDC_nrcodes[i]);for (i=0; i<12; i++)writebyte(DHTinfo.YDC_values[i]);writebyte(DHTinfo.HTYACinfo);for (i=0; i<16; i++)writebyte(DHTinfo.YAC_nrcodes[i]);for (i=0; i<162; i++)writebyte(DHTinfo.YAC_values[i]);writebyte(DHTinfo.HTCbDCinfo);for (i=0; i<16; i++)writebyte(DHTinfo.CbDC_nrcodes[i]);for (i=0; i<12; i++)writebyte(DHTinfo.CbDC_values[i]);writebyte(DHTinfo.HTCbACinfo);for (i=0; i<16; i++)writebyte(DHTinfo.CbAC_nrcodes[i]);for (i=0; i<162; i++)writebyte(DHTinfo.CbAC_values[i]);}void set_DHTinfo(){BYTE i;// fill the DHTinfo structure [get the values from the standard Huffman tables]DHTinfo.marker = 0xFFC4;DHTinfo.length = 0x01A2;DHTinfo.HTYDCinfo = 0;for (i=0; i<16; i++)DHTinfo.YDC_nrcodes[i] = std_dc_luminance_nrcodes[i+1];for (i=0; i<12; i++)DHTinfo.YDC_values[i] = std_dc_luminance_values[i];DHTinfo.HTYACinfo = 0x10;for (i=0; i<16; i++)DHTinfo.YAC_nrcodes[i] = std_ac_luminance_nrcodes[i+1];for (i=0; i<162; i++)DHTinfo.YAC_values[i] = std_ac_luminance_values[i];DHTinfo.HTCbDCinfo = 1;for (i=0; i<16; i++)DHTinfo.CbDC_nrcodes[i] = std_dc_chrominance_nrcodes[i+1];for (i=0; i<12; i++)DHTinfo.CbDC_values[i] = std_dc_chrominance_values[i];DHTinfo.HTCbACinfo = 0x11;for (i=0; i<16; i++)DHTinfo.CbAC_nrcodes[i] = std_ac_chrominance_nrcodes[i+1];for (i=0; i<162; i++)DHTinfo.CbAC_values[i] = std_ac_chrominance_values[i];}void write_SOSinfo()//Nothing to overwrite for SOSinfo{writeword(SOSinfo.marker);writeword(SOSinfo.length);writebyte(SOSinfo.nrofcomponents);writebyte(SOSinfo.IdY);writebyte(SOSinfo.HTY);writebyte(SOSinfo.IdCb);writebyte(SOSinfo.HTCb);writebyte(SOSinfo.IdCr);writebyte(SOSinfo.HTCr);writebyte(SOSinfo.Ss);writebyte(SOSinfo.Se);writebyte(SOSinfo.Bf);}void write_comment(BYTE *comment){WORD i, length;writeword(0xFFFE); // The COM markerlength = strlen((const char *)comment);writeword(length + 2);for (i=0; i<length; i++)writebyte(comment[i]);}void writebits(bitstring bs)// A portable version; it should be done in assembler{WORD value;SBYTE posval;// bit position in the bitstring we read, should be <=15 and >=0value = bs.value;posval = bs.length - 1;while (posval >= 0){if (value & mask[posval])bytenew |= mask[bytepos];posval--;bytepos--;if (bytepos < 0){// write itif (bytenew == 0xFF){// special casewritebyte(0xFF);writebyte(0);}elsewritebyte(bytenew);// reinitbytepos = 7;bytenew = 0;}}}void compute_Huffman_table(BYTE *nrcodes, BYTE *std_table, bitstring *HT){BYTE k,j;BYTE pos_in_table;WORD codevalue;codevalue = 0;pos_in_table = 0;for (k=1; k<=16; k++){for (j=1; j<=nrcodes[k]; j++){HT[std_table[pos_in_table]].value = codevalue;HT[std_table[pos_in_table]].length = k;pos_in_table++;codevalue++;}codevalue <<= 1;}}void init_Huffman_tables(){// Compute the Huffman tables used for encodingcompute_Huffman_table(std_dc_luminance_nrcodes, std_dc_luminance_values, YDC_HT);compute_Huffman_table(std_ac_luminance_nrcodes, std_ac_luminance_values, YAC_HT);compute_Huffman_table(std_dc_chrominance_nrcodes, std_dc_chrominance_values, CbDC_HT);compute_Huffman_table(std_ac_chrominance_nrcodes, std_ac_chrominance_values, CbAC_HT); }void exitmessage(char *error_message){printf("%s\n",error_message);exit(EXIT_FAILURE);}void set_numbers_category_and_bitcode(){SDWORD nr;SDWORD nrlower, nrupper;BYTE cat;category_alloc = (BYTE *)malloc(65535*sizeof(BYTE));if (category_alloc == NULL)exitmessage("Not enough memory.");//allow negative subscriptscategory = category_alloc + 32767;bitcode_alloc=(bitstring *)malloc(65535*sizeof(bitstring));if (bitcode_alloc==NULL)exitmessage("Not enough memory.");bitcode = bitcode_alloc + 32767;nrlower = 1;nrupper = 2;for (cat=1; cat<=15; cat++){//Positive numbersfor (nr=nrlower; nr<nrupper; nr++){category[nr] = cat;bitcode[nr].length = cat;bitcode[nr].value = (WORD)nr;}//Negative numbersfor (nr=-(nrupper-1); nr<=-nrlower; nr++){category[nr] = cat;bitcode[nr].length = cat;bitcode[nr].value = (WORD)(nrupper-1+nr);}nrlower <<= 1;nrupper <<= 1;}}void precalculate_YCbCr_tables(){WORD R,G,B;for (R=0; R<256; R++){YRtab[R] = (SDWORD)(65536*0.299+0.5)*R;CbRtab[R] = (SDWORD)(65536*-0.16874+0.5)*R;CrRtab[R] = (SDWORD)(32768)*R;}for (G=0; G<256; G++){YGtab[G] = (SDWORD)(65536*0.587+0.5)*G;CbGtab[G] = (SDWORD)(65536*-0.33126+0.5)*G;CrGtab[G] = (SDWORD)(65536*-0.41869+0.5)*G;}for (B=0; B<256; B++){YBtab[B] = (SDWORD)(65536*0.114+0.5)*B;CbBtab[B] = (SDWORD)(32768)*B;CrBtab[B] = (SDWORD)(65536*-0.08131+0.5)*B;}}// Using a bit modified form of the FDCT routine from IJG's C source:// Forward DCT routine idea taken from Independent JPEG Group's C source for// JPEG encoders/decoders/* For float AA&N IDCT method, divisors are equal to quantization coefficients scaled by scalefactor[row]*scalefactor[col], wherescalefactor[0] = 1scalefactor[k] = cos(k*PI/16) * sqrt(2) for k=1..7We apply a further scale factor of 8.What's actually stored is 1/divisor so that the inner loop canuse a multiplication rather than a division. */void prepare_quant_tables(){double aanscalefactor[8] = {1.0, 1.387039845, 1.306562965, 1.175875602,1.0, 0.785694958, 0.541196100, 0.275899379};BYTE row, col;BYTE i = 0;for (row = 0; row < 8; row++){for (col = 0; col < 8; col++){fdtbl_Y[i] = (float) (1.0 / ((double) DQTinfo.Ytable[zigzag[i]] *aanscalefactor[row] * aanscalefactor[col] * 8.0));fdtbl_Cb[i] = (float) (1.0 / ((double) DQTinfo.Cbtable[zigzag[i]] *aanscalefactor[row] * aanscalefactor[col] * 8.0));i++;}}}void fdct_and_quantization(SBYTE *data, float *fdtbl, SWORD *outdata){float tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;float tmp10, tmp11, tmp12, tmp13;float z1, z2, z3, z4, z5, z11, z13;float *dataptr;float datafloat[64];float temp;SBYTE ctr;BYTE i;for (i=0; i<64; i++)datafloat[i] = data[i];/* Pass 1: process rows. */dataptr = datafloat;for (ctr = 7; ctr >= 0; ctr--){tmp0 = dataptr[0] + dataptr[7];tmp7 = dataptr[0] - dataptr[7];tmp1 = dataptr[1] + dataptr[6];tmp6 = dataptr[1] - dataptr[6];tmp2 = dataptr[2] + dataptr[5];tmp5 = dataptr[2] - dataptr[5];tmp3 = dataptr[3] + dataptr[4];tmp4 = dataptr[3] - dataptr[4];/* Even part */tmp10 = tmp0 + tmp3; /* phase 2 */tmp13 = tmp0 - tmp3;tmp11 = tmp1 + tmp2;tmp12 = tmp1 - tmp2;dataptr[0] = tmp10 + tmp11; /* phase 3 */dataptr[4] = tmp10 - tmp11;z1 = (tmp12 + tmp13) * ((float) 0.707106781); /* c4 */dataptr[2] = tmp13 + z1; /* phase 5 */dataptr[6] = tmp13 - z1;/* Odd part */tmp10 = tmp4 + tmp5; /* phase 2 */tmp11 = tmp5 + tmp6;tmp12 = tmp6 + tmp7;/* The rotator is modified from fig 4-8 to avoid extra negations. */z5 = (tmp10 - tmp12) * ((float) 0.382683433); /* c6 */z2 = ((float) 0.541196100) * tmp10 + z5; /* c2-c6 */z4 = ((float) 1.306562965) * tmp12 + z5; /* c2+c6 */z3 = tmp11 * ((float) 0.707106781); /* c4 */z11 = tmp7 + z3; /* phase 5 */z13 = tmp7 - z3;dataptr[5] = z13 + z2; /* phase 6 */dataptr[3] = z13 - z2;dataptr[1] = z11 + z4;dataptr[7] = z11 - z4;dataptr += 8; /* advance pointer to next row */ }/* Pass 2: process columns. */dataptr = datafloat;for (ctr = 7; ctr >= 0; ctr--){tmp0 = dataptr[0] + dataptr[56];tmp7 = dataptr[0] - dataptr[56];tmp1 = dataptr[8] + dataptr[48];tmp6 = dataptr[8] - dataptr[48];tmp2 = dataptr[16] + dataptr[40];tmp5 = dataptr[16] - dataptr[40];tmp3 = dataptr[24] + dataptr[32];tmp4 = dataptr[24] - dataptr[32];/* Even part */tmp10 = tmp0 + tmp3; /* phase 2 */tmp13 = tmp0 - tmp3;tmp11 = tmp1 + tmp2;tmp12 = tmp1 - tmp2;dataptr[0] = tmp10 + tmp11; /* phase 3 */dataptr[32] = tmp10 - tmp11;z1 = (tmp12 + tmp13) * ((float) 0.707106781); /* c4 */dataptr[16] = tmp13 + z1; /* phase 5 */dataptr[48] = tmp13 - z1;/* Odd part */tmp10 = tmp4 + tmp5; /* phase 2 */tmp11 = tmp5 + tmp6;tmp12 = tmp6 + tmp7;/* The rotator is modified from fig 4-8 to avoid extra negations. */z5 = (tmp10 - tmp12) * ((float) 0.382683433); /* c6 */z2 = ((float) 0.541196100) * tmp10 + z5; /* c2-c6 */z4 = ((float) 1.306562965) * tmp12 + z5; /* c2+c6 */z3 = tmp11 * ((float) 0.707106781); /* c4 */z11 = tmp7 + z3; /* phase 5 */z13 = tmp7 - z3;dataptr[40] = z13 + z2; /* phase 6 */dataptr[24] = z13 - z2;dataptr[8] = z11 + z4;dataptr[56] = z11 - z4;dataptr++; /* advance pointer to next column */ }/* Quantize/descale the coefficients, and store into output array */for (i = 0; i < 64; i++){/* Apply the quantization and scaling factor */temp = datafloat[i] * fdtbl[i];/* Round to nearest integer.Since C does not specify the direction of rounding for negativequotients, we have to force the dividend positive for portability.The maximum coefficient size is +-16K (for 12-bit data), so thiscode should work for either 16-bit or 32-bit ints.*/outdata[i] = (SWORD) ((SWORD)(temp + 16384.5) - 16384);}}void process_DU(SBYTE *ComponentDU,float *fdtbl,SWORD *DC,bitstring *HTDC,bitstring *HTAC){bitstring EOB = HTAC[0x00];bitstring M16zeroes = HTAC[0xF0];BYTE i;BYTE startpos;BYTE end0pos;BYTE nrzeroes;BYTE nrmarker;SWORD Diff;fdct_and_quantization(ComponentDU, fdtbl, DU_DCT);// zigzag reorderfor (i=0; i<64; i++)DU[zigzag[i]]=DU_DCT[i];// Encode DCDiff = DU[0] - *DC;*DC = DU[0];if (Diff == 0)writebits(HTDC[0]); //Diff might be 0else{writebits(HTDC[category[Diff]]);writebits(bitcode[Diff]);}// Encode ACsfor (end0pos=63; (end0pos>0)&&(DU[end0pos]==0); end0pos--) ;//end0pos = first element in reverse order != 0i = 1;while (i <= end0pos){startpos = i;for (; (DU[i]==0) && (i<=end0pos); i++) ;nrzeroes = i - startpos;if (nrzeroes >= 16){for (nrmarker=1; nrmarker<=nrzeroes/16; nrmarker++)writebits(M16zeroes);nrzeroes = nrzeroes%16;}writebits(HTAC[nrzeroes*16+category[DU[i]]]);writebits(bitcode[DU[i]]);i++;}if (end0pos != 63)writebits(EOB);}void load_data_units_from_RGB_buffer(WORD xpos, WORD ypos){BYTE x, y;BYTE pos = 0;DWORD location;BYTE R, G, B;location = ypos * width + xpos;for (y=0; y<8; y++){for (x=0; x<8; x++){R = RGB_buffer[location].R;G = RGB_buffer[location].G;B = RGB_buffer[location].B;// convert to YCbCrYDU[pos] = Y(R,G,B);CbDU[pos] = Cb(R,G,B);CrDU[pos] = Cr(R,G,B);location++;pos++;}location += width - 8;}}void main_encoder(){SWORD DCY = 0, DCCb = 0, DCCr = 0; //DC coefficients used for differential encoding WORD xpos, ypos;for (ypos=0; ypos<height; ypos+=8){for (xpos=0; xpos<width; xpos+=8){load_data_units_from_RGB_buffer(xpos, ypos);process_DU(YDU, fdtbl_Y, &DCY, YDC_HT, YAC_HT);process_DU(CbDU, fdtbl_Cb, &DCCb, CbDC_HT, CbAC_HT);process_DU(CrDU, fdtbl_Cb, &DCCr, CbDC_HT, CbAC_HT);}}}void load_bitmap(char *bitmap_name, WORD *width_original, WORD *height_original){WORD widthDiv8, heightDiv8; // closest multiple of 8 [ceil]BYTE nr_fillingbytes;//The number of the filling bytes in the BMP file// (the dimension in bytes of a BMP line on the disk is divisible by 4)colorRGB lastcolor;WORD column;BYTE TMPBUF[256];WORD nrline_up, nrline_dn, nrline;WORD dimline;colorRGB *tmpline;FILE *fp_bitmap = fopen(bitmap_name,"rb");if (fp_bitmap==NULL)exitmessage("Cannot open bitmap file.File not found ?");if (fread(TMPBUF, 1, 54, fp_bitmap) != 54)exitmessage("Need a truecolor BMP to encode.");if ((TMPBUF[0]!='B')||(TMPBUF[1]!='M')||(TMPBUF[28]!=24))exitmessage("Need a truecolor BMP to encode.");width = (WORD)TMPBUF[19]*256+TMPBUF[18];height = (WORD)TMPBUF[23]*256+TMPBUF[22];// Keep the old dimensions of the image*width_original = width;*height_original = height;if (width%8 != 0)widthDiv8 = (width/8)*8+8;elsewidthDiv8 = width;if (height%8 != 0)heightDiv8 = (height/8)*8+8;elseheightDiv8 = height;// The image we encode shall be filled with the last line and the last column// from the original bitmap, until width and height are divisible by 8// Load BMP image from disk and complete XRGB_buffer = (colorRGB *)(malloc(3*widthDiv8*heightDiv8));if (RGB_buffer == NULL)exitmessage("Not enough memory for the bitmap image.");if ( (width*3)%4 != 0)nr_fillingbytes = 4 - ( (width*3)%4);elsenr_fillingbytes = 0;for (nrline=0; nrline<height; nrline++){fread(RGB_buffer + nrline*widthDiv8, 1, width*3, fp_bitmap);fread(TMPBUF, 1, nr_fillingbytes, fp_bitmap);// complete Xmemcpy(&lastcolor, RGB_buffer + nrline*widthDiv8 + width-1, 3);for (column=width; column<widthDiv8; column++)memcpy(RGB_buffer+nrline*widthDiv8+column, &lastcolor, 3);}width = widthDiv8;dimline = width*3;tmpline = (colorRGB *)malloc(dimline);if (tmpline == NULL)exitmessage("Not enough memory.");// Reorder in memory the inversed bitmapfor (nrline_up=height-1,nrline_dn=0; nrline_up>nrline_dn; nrline_up--,nrline_dn++){memcpy(tmpline, RGB_buffer+nrline_up*width, dimline);memcpy(RGB_buffer+nrline_up*width, RGB_buffer+nrline_dn*width, dimline);memcpy(RGB_buffer+nrline_dn*width, tmpline, dimline);}// Y completion:memcpy(tmpline, RGB_buffer+(height-1)*width, dimline);for (nrline=height; nrline<heightDiv8; nrline++)memcpy(RGB_buffer+nrline*width, tmpline, dimline);height = heightDiv8;free(tmpline);fclose(fp_bitmap);}void init_all(){set_DQTinfo();set_DHTinfo();init_Huffman_tables();set_numbers_category_and_bitcode();precalculate_YCbCr_tables();prepare_quant_tables();}void main(int argc, char *argv[]){char BMP_filename[64];char JPG_filename[64];WORD width_original,height_original; //the original image dimensions, // before we made them divisible by 8BYTE len_filename;bitstring fillbits; //filling bitstring for the bit alignment of the EOI markerif (argc>1){strcpy(BMP_filename,argv[1]);if (argc>2)strcpy(JPG_filename,argv[2]);else{// replace ".bmp" with ".jpg"strcpy(JPG_filename, BMP_filename);len_filename=strlen(BMP_filename);strcpy(JPG_filename+(len_filename-3),"jpg");}}elseexitmessage("Syntax: enc fis.bmp [fis.jpg]");load_bitmap(BMP_filename, &width_original, &height_original);fp_jpeg_stream = fopen(JPG_filename,"wb");init_all();SOF0info.width = width_original;SOF0info.height = height_original;writeword(0xFFD8); // SOIwrite_APP0info();// write_comment("Cris made this JPEG with his own encoder");write_DQTinfo();write_SOF0info();write_DHTinfo();write_SOSinfo();// init global variablesbytenew = 0; // current bytebytepos = 7; // bit position in this bytemain_encoder();// Do the bit alignment of the EOI markerif (bytepos >= 0){fillbits.length = bytepos + 1;fillbits.value = (1<<(bytepos+1)) - 1;writebits(fillbits);}writeword(0xFFD9); // EOIfree(RGB_buffer);free(category_alloc);free(bitcode_alloc);fclose(fp_jpeg_stream);}//JGLOBALS.Hstatic BYTE bytenew=0; // The byte that will be written in the JPG filestatic SBYTE bytepos=7; // bit position in the byte we write (bytenew)//should be<=7 and >=0static WORD mask[16]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768}; // The Huffman tables we'll use:static bitstring YDC_HT[12];static bitstring CbDC_HT[12];static bitstring YAC_HT[256];static bitstring CbAC_HT[256];static BYTE *category_alloc;static BYTE *category; //Here we'll keep the category of the numbers in range: -32767..32767 static bitstring *bitcode_alloc;static bitstring *bitcode; // their bitcoded representation//Precalculated tables for a faster YCbCr->RGB transformation// We use a SDWORD table because we'll scale values by 2^16 and work with integersstatic SDWORD YRtab[256],YGtab[256],YBtab[256];static SDWORD CbRtab[256],CbGtab[256],CbBtab[256];static SDWORD CrRtab[256],CrGtab[256],CrBtab[256];static float fdtbl_Y[64];static float fdtbl_Cb[64]; //the same with the fdtbl_Cr[64]colorRGB *RGB_buffer; //image to be encodedWORD width, height;// image dimensions divisible by 8static SBYTE YDU[64]; // This is the Data Unit of Y after YCbCr->RGB transformation static SBYTE CbDU[64];static SBYTE CrDU[64];static SWORD DU_DCT[64]; // Current DU (after DCT and quantization) which we'll zigzag static SWORD DU[64]; //zigzag reordered DU which will be Huffman codedFILE *fp_jpeg_stream;//JTABLES.Hstatic BYTE zigzag[64]={ 0, 1, 5, 6,14,15,27,28,2, 4, 7,13,16,26,29,42,3, 8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63 };/* These are the sample quantization tables given in JPEG spec section K.1.The spec says that the values given produce "good" quality, andwhen divided by 2, "very good" quality.*/static BYTE std_luminance_qt[64] = {16, 11, 10, 16, 24, 40, 51, 61,12, 12, 14, 19, 26, 58, 60, 55,14, 13, 16, 24, 40, 57, 69, 56,14, 17, 22, 29, 51, 87, 80, 62,18, 22, 37, 56, 68, 109, 103, 77,24, 35, 55, 64, 81, 104, 113, 92,49, 64, 78, 87, 103, 121, 120, 101,72, 92, 95, 98, 112, 100, 103, 99};static BYTE std_chrominance_qt[64] = {17, 18, 24, 47, 99, 99, 99, 99,18, 21, 26, 66, 99, 99, 99, 99,24, 26, 56, 99, 99, 99, 99, 99,47, 66, 99, 99, 99, 99, 99, 99,99, 99, 99, 99, 99, 99, 99, 99,99, 99, 99, 99, 99, 99, 99, 99,99, 99, 99, 99, 99, 99, 99, 99,99, 99, 99, 99, 99, 99, 99, 99};// Standard Huffman tables (cf. JPEG standard section K.3) */static BYTE std_dc_luminance_nrcodes[17]={0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0}; static BYTE std_dc_luminance_values[12]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};static BYTE std_dc_chrominance_nrcodes[17]={0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0}; static BYTE std_dc_chrominance_values[12]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};static BYTE std_ac_luminance_nrcodes[17]={0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0x7d }; static BYTE std_ac_luminance_values[162]= {0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12,0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08,0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0,0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16,0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28,0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6,0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4,0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,0xf9, 0xfa };static BYTE std_ac_chrominance_nrcodes[17]={0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,0x77}; static BYTE std_ac_chrominance_values[162]={0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21,0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91,0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0,0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34,0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26,0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38,0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96,0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5,0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4,0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3,0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2,0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,0xf9, 0xfa };//JTYPES.H#define BYTE unsigned char#define SBYTE signed char#define SWORD signed short int#define WORD unsigned short int#define DWORD unsigned long int#define SDWORD signed long intstatic struct APP0infotype {WORD marker;// = 0xFFE0WORD length; // = 16 for usual JPEG, no thumbnailBYTE JFIFsignature[5]; // = "JFIF",'\0'BYTE versionhi; // 1BYTE versionlo; // 1BYTE xyunits; // 0 = no units, normal densityWORD xdensity; // 1WORD ydensity; // 1BYTE thumbnwidth; // 0BYTE thumbnheight; // 0} APP0info={0xFFE0,16,'J','F','I','F',0,1,1,0,1,1,0,0};static struct SOF0infotype {WORD marker; // = 0xFFC0WORD length; // = 17 for a truecolor YCbCr JPGBYTE precision ;// Should be 8: 8 bits/sampleWORD height ;WORD width;BYTE nrofcomponents;//Should be 3: We encode a truecolor JPGBYTE IdY; // = 1BYTE HVY; // sampling factors for Y (bit 0-3 vert., 4-7 hor.)BYTE QTY; // Quantization Table number for Y = 0BYTE IdCb; // = 2BYTE HVCb;BYTE QTCb; // 1BYTE IdCr; // = 3BYTE HVCr;BYTE QTCr; // Normally equal to QTCb = 1} SOF0info = { 0xFFC0,17,8,0,0,3,1,0x11,0,2,0x11,1,3,0x11,1};// Default sampling factors are 1,1 for every image component: No downsampling static struct DQTinfotype {WORD marker; // = 0xFFDBWORD length; // = 132BYTE QTYinfo;// = 0: bit 0..3: number of QT = 0 (table for Y)// bit 4..7: precision of QT, 0 = 8 bit BYTE Ytable[64];BYTE QTCbinfo; // = 1 (quantization table for Cb,Cr}BYTE Cbtable[64];} DQTinfo;// Ytable from DQTinfo should be equal to a scaled and zizag reordered version// of the table which can be found in "tables.h": std_luminance_qt// Cbtable , similar = std_chrominance_qt// We'll init them in the program using set_DQTinfo functionstatic struct DHTinfotype {WORD marker; // = 0xFFC4WORD length; //0x01A2BYTE HTYDCinfo; // bit 0..3: number of HT (0..3), for Y =0//bit 4 :type of HT, 0 = DC table,1 = AC table//bit 5..7: not used, must be 0BYTE YDC_nrcodes[16]; //at index i = nr of codes with length iBYTE YDC_values[12];BYTE HTYACinfo; // = 0x10BYTE YAC_nrcodes[16];BYTE YAC_values[162];//we'll use the standard Huffman tablesBYTE HTCbDCinfo; // = 1BYTE CbDC_nrcodes[16];BYTE CbDC_values[12];BYTE HTCbACinfo; // = 0x11BYTE CbAC_nrcodes[16];BYTE CbAC_values[162];} DHTinfo;static struct SOSinfotype {WORD marker; // = 0xFFDAWORD length; // = 12BYTE nrofcomponents; // Should be 3: truecolor JPGBYTE IdY; //1BYTE HTY; //0 // bits 0..3: AC table (0..3)// bits 4..7: DC table (0..3)BYTE IdCb; //2BYTE HTCb; //0x11BYTE IdCr; //3BYTE HTCr; //0x11BYTE Ss,Se,Bf; // not interesting, they should be 0,63,0} SOSinfo={0xFFDA,12,3,1,0,2,0x11,3,0x11,0,0x3F,0};typedef struct { BYTE B,G,R; } colorRGB;typedef struct { BYTE length;WORD value;} bitstring;#define Y(R,G,B) ((BYTE)( (YRtab[(R)]+YGtab[(G)]+YBtab[(B)])>>16 ) - 128) #define Cb(R,G,B) ((BYTE)( (CbRtab[(R)]+CbGtab[(G)]+CbBtab[(B)])>>16 ) ) #define Cr(R,G,B) ((BYTE)( (CrRtab[(R)]+CrGtab[(G)]+CrBtab[(B)])>>16 ) )#define writebyte(b) fputc((b),fp_jpeg_stream)#define writeword(w) writebyte((w)/256);writebyte((w)%256);。
python批量修改图片后缀的方法(png到jpg)
python批量修改图⽚后缀的⽅法(png到jpg)
本⼈最近在利⽤faster_rcnn训练kitti数据集,其中需要将kitti数据集转为voc数据集,但是发现:
kitti图⽚是png格式
voc2007是jpg格式
其中有7000多张图⽚需要批量转换,在⽹上发现⼀些代码,但跑起来有错误,于是本⼈稍作修改:
import os
import string
dirName = "D:your path\\" #最后要加双斜杠,不然会报错
li=os.listdir(dirName)
for filename in li:
newname = filename
newname = newname.split(".")
if newname[-1]=="png":
newname[-1]="jpg"
newname = str.join(".",newname) #这⾥要⽤str.join
filename = dirName+filename
newname = dirName+newname
os.rename(filename,newname)
print(newname,"updated successfully")
此⽅法不仅可以⽤于转换图⽚后缀,也可以⽤于其他⽂件的后缀转换。
以上这篇python批量修改图⽚后缀的⽅法(png到jpg)就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
照片冲印小程序源码
照片冲印小程序源码下面是一个简单的照片冲印小程序源码示例,代码采用Python语言编写,共计1200字以上。
```python# -*- coding:utf-8 -*-import osdef main(:print("欢迎使用照片冲印小程序!")while True:print("请选择操作:")print("1. 查看照片")print("2. 冲印照片")print("3. 删除照片")print("4. 退出程序")choice = input("请输入操作编号:")if choice == "1":view_photoselif choice == "2":print("请输入照片路径:")path = inputprint("请输入冲印数量:")num = inputprint("是否需要加急冲印?(是/否)") is_urgent = inputprint("正在冲印照片...")print("照片路径:", path)print("冲印数量:", num)print("是否加急:", is_urgent) print("照片冲印完成!")elif choice == "3":print("请输入要删除的照片路径:") path = inputif os.path.exists(path):os.remove(path)print("照片删除成功!")else:print("照片不存在!")elif choice == "4":print("程序已退出,再见!")breakelse:print("输入无效,请重新输入!")def view_photos(:print("正在查看照片...")#这里可以加入查看照片的相关代码print("照片查看完成!")if __name__ == "__main__":main```这是一个简单的照片冲印小程序,提供了查看照片、冲印照片、删除照片和退出程序的功能。
autoshop编程程序案例
autoshop编程程序案例【实用版】目录1.AutoShop 编程程序概述2.AutoShop 编程程序案例详解3.AutoShop 编程程序案例带来的启示正文【1.AutoShop 编程程序概述】AutoShop 是一款功能强大的图形图像处理软件,它广泛应用于数字图像处理、广告设计、视觉传达等领域。
AutoShop 的编程功能,可以让用户通过编写脚本实现对图像的自动化处理,极大地提高了工作效率。
下面,我们将通过一个具体的案例,来详细了解 AutoShop 编程程序的魅力。
【2.AutoShop 编程程序案例详解】假设我们有一组图片,需要对每一张图片进行如下操作:将图片的背景颜色改为白色,将图片中的文字颜色改为黑色,并将所有图片的尺寸统一为 100x100 像素。
如果使用传统的图像处理方法,我们需要对每一张图片单独进行操作,无疑会耗费大量的时间和精力。
而通过 AutoShop 编程程序,我们可以轻松实现这一目标。
首先,我们需要创建一个新的 AutoShop 脚本文件,然后在脚本中编写如下代码:```// 打开图片var file = File.openDialog("请选择图片路径");var doc = app.open(file);// 修改背景颜色var bgColor = new SolidColor();bgColor.rgb.hexValue = "FFFFFF";doc.backgroundColor = bgColor;// 修改文字颜色var textColor = new SolidColor();textColor.rgb.hexValue = "000000";// 循环遍历所有图层,修改文字颜色for (var i = 0; i < yers.length; i++) {if (yers[i].type == LayerType.TEXT) {yers[i].textItem.color = textColor;}}// 调整图片尺寸var newWidth = 100;var newHeight = 100;doc.resize(newWidth, newHeight);// 保存图片var saveFile = new File(doc.path + "/100x100.png");doc.saveAs(saveFile, new PNGSaveOptions(), true);```在编写好脚本后,我们只需运行脚本,AutoShop 就会自动完成对所有图片的处理,并将处理后的图片保存为 100x100 像素的尺寸。
自己积累的一些EmguCV代码(主要有图片格式转换,图片裁剪,图片翻转,图片旋转和图片平移等功能)
⾃⼰积累的⼀些EmguCV代码(主要有图⽚格式转换,图⽚裁剪,图⽚翻转,图⽚旋转和图⽚平移等功能)using System;using System.Drawing;using Emgu.CV;using Emgu.CV.CvEnum;using Emgu.CV.Structure;namespace ZNLGIS{public class ImageClass{//图⽚裁剪public static Image<Bgr, Byte> Cut(Image<Bgr,Byte> image ,Rectangle rectangle){System.Drawing.Size roisize = new Size(260,380);IntPtr dst = CvInvoke.cvCreateImage(roisize, Emgu.CV.CvEnum.IPL_DEPTH.IPL_DEPTH_8U, 3);CvInvoke.cvSetImageROI(image.Ptr, rectangle);CvInvoke.cvCopy(image.Ptr, dst, IntPtr.Zero);return OpenCVEmguCVDotNet.IplImagePointerToEmgucvImage<Bgr, Byte>(dst);}//图⽚裁剪public static Image<Bgr, Byte> Cut2(Image<Bgr,Byte> image,int oldwidth,int oldheight){int x = image.Width - oldwidth;int y = image.Height - oldheight;System.Drawing.Size roisize = new System.Drawing.Size(oldwidth, oldheight); //要裁剪的图⽚⼤⼩IntPtr dst = CvInvoke.cvCreateImage(roisize, Emgu.CV.CvEnum.IPL_DEPTH.IPL_DEPTH_8U, 3);System.Drawing.Rectangle rect = new System.Drawing.Rectangle(x/2, y/2, oldwidth, oldheight);CvInvoke.cvSetImageROI(image.Ptr, rect);CvInvoke.cvCopy(image.Ptr, dst, IntPtr.Zero);return OpenCVEmguCVDotNet.IplImagePointerToEmgucvImage<Bgr, Byte>(dst);}//图⽚翻转public static Image<Bgr, Byte> FlipImage(Image<Bgr, Byte> image, bool isHorizontal){if (isHorizontal){CvInvoke.cvFlip(image.Ptr, IntPtr.Zero, FLIP.HORIZONTAL);}else{CvInvoke.cvFlip(image.Ptr, IntPtr.Zero, FLIP.VERTICAL);}return image;}//图⽚旋转public static Image<Bgr, Byte> RotateImage(Image<Bgr, Byte> image_old, double angle, bool clockwise){IntPtr image_temp;double anglerad = Math.PI * (angle / 180);int newwidth = (int)Math.Abs(image_old.Bitmap.Height * Math.Sin(anglerad)) +(int)Math.Abs(image_old.Bitmap.Width * Math.Cos(anglerad)) + 1;int newheight = (int)Math.Abs(image_old.Bitmap.Height * Math.Cos(anglerad)) +(int)Math.Abs(image_old.Bitmap.Width * Math.Sin(anglerad)) + 1;image_temp = CvInvoke.cvCreateImage(new Size(newwidth, newheight), IPL_DEPTH.IPL_DEPTH_8U, 3);CvInvoke.cvZero(image_temp);int flag = -1;if (clockwise){flag = 1;}float[] m = new float[6];int w = image_old.Bitmap.Width;int h = image_old.Bitmap.Height;m[0] = (float)Math.Cos(flag * angle * Math.PI / 180);m[1] = (float)Math.Sin(flag * angle * Math.PI / 180);m[3] = -m[1];m[4] = m[0];m[2] = w * 0.5f;unsafe{void* p;IntPtr ptr;fixed (float* pc = m){p = (void*)pc;ptr = new IntPtr(p);}IntPtr M = CvInvoke.cvMat(2, 3, MAT_DEPTH.CV_32F, ptr);CvInvoke.cvGetQuadrangleSubPix(image_old.Ptr,image_temp,M);}return OpenCVEmguCVDotNet.IplImagePointerToEmgucvImage<Bgr, Byte>(image_temp);}//图⽚平移public static Image<Bgr, Byte> Py(Image<Bgr, Byte> src,int x,int y){System.Drawing.Size roisize = new Size(src.Width, src.Height);Image<Bgr, Byte> dst = new Image<Bgr, byte>(src.Width, src.Height, new Bgr(Color.Transparent));int i, j;int w = src.Width;int h = src.Height;if (x >= 0 && y >= 0){for (i = 0; i < w - x; i++){for (j = 0; j < h - y; j++){CvInvoke.cvSet2D(dst, j + y, i + x, CvInvoke.cvGet2D(src, j, i));}}}else if (x >= 0 && y < 0){for (i = 0; i < w - x; i++){for (j = -y; j < h; j++){CvInvoke.cvSet2D(dst, j + y, i + x, CvInvoke.cvGet2D(src, j, i));}}}else if (x < 0 && y >= 0){for (i = -x; i < w; i++){for (j = 0; j < h - y; j++){CvInvoke.cvSet2D(dst, j + y, i + x, CvInvoke.cvGet2D(src, j, i));}}}else{for (i = -x; i < w; i++){for (j = -y; j < h; j++){CvInvoke.cvSet2D(dst, j + y, i + x, CvInvoke.cvGet2D(src, j, i));}}}return OpenCVEmguCVDotNet.IplImagePointerToEmgucvImage<Bgr, Byte>(dst);}}}using System;using System.Drawing;using System.Drawing.Imaging;using System.Runtime.InteropServices;using Emgu.CV;using Emgu.CV.CvEnum;namespace ZNLGIS{public class OpenCVEmguCVDotNet{/// <summary>/// 将MIplImage结构转换到IplImage指针;/// 注意:指针在使⽤完之后必须⽤Marshal.FreeHGlobal⽅法释放。
用Python编写简单的图像处理和图形生成工具
用Python编写简单的图像处理和图形生成工具Python是一种强大的编程语言,同时也具有广泛的图像处理和图形生成工具,可以帮助我们进行各种图片编辑和图形生成的任务。
接下来,我将介绍几个常用的Python图像处理和图形生成工具,并且提供一些使用示例。
1. PIL(Python Imaging Library): PIL是Python中最常用的图像处理库之一,可以用来打开、编辑和保存各种图像格式的图片。
它提供了丰富的图像处理函数,如缩放、旋转、剪切、滤镜等,可以满足大部分的图像处理需求。
下面是一个使用PIL库进行图像缩放的示例:```pythonfrom PIL import Image#打开图片img = Image.open('input.jpg')#缩放图片new_img = img.resize((500, 500))#保存缩放后的图片new_img.save('output.jpg')```2. OpenCV:OpenCV是一种开源的计算机视觉库,可以用于处理图像和视频。
它支持各种图像处理和计算机视觉任务,如颜色转换、边缘检测、人脸识别等。
OpenCV具有强大的图像处理功能,而且还可以与其他机器学习库结合使用。
下面是一个使用OpenCV库进行图像边缘检测的示例:```pythonimport cv2#读取图片img = cv2.imread('input.jpg')#转换为灰度图gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#边缘检测edges = cv2.Canny(gray, 100, 200)#显示结果cv2.imshow('Edges', edges)cv2.waitKey(0)```3. Matplotlib:Matplotlib是一个绘图库,用于生成各种类型的图形,如折线图、散点图、柱状图等。
无损批量修改图片MD5工具免费绿色版自媒体和SEO必备神器
⽆损批量修改图⽚MD5⼯具免费绿⾊版⾃媒体和SEO必备神器各个⾃媒体平台都要求图⽂并茂,⽂字要原创,图⽚也要原创。
平台检测原创,不仅会检测⽂章,还会检测图⽚。
你绞尽脑汁⾟苦写好了原创⽂章,结果⽤了⼀个⽹图,影响了整个原创度,从⽽导致降权不被推荐。
如果每个图⽚都去编辑修改⼀下,⼜极为占⽤时间。
所以,这个⼩⼯具就解决了这个痛点,它能⽆限修改MD5,让你把好图⽚任意复⽤、⽤到极致。
【什么是图⽚MD5?】MD5是⼀段固定长度的数据,不管原始数据是多长或多短,其md5值都是128bit。
MD5具有确定性,⼀个原始数据的MD5值是唯⼀的,同⼀个原始数据不可能会计算出多个不同的MD5值。
所以讲⼈话,图⽚MD5就相当于⼀张图⽚的⾝份证,每张图⽚都对应⼀个唯⼀的MD5⾝份证号。
所以,我们⽹上下载的图⽚,如果很多⼈使⽤,计算机就能识别它们是⼀张图⽚。
但是,如果你⽤某种⼿段,改变了这个MD5值,虽然⼈眼看是⼀模⼀样的图⽚,但是在计算机的眼⾥,就是完全不同的图⽚,这就达到了图⽚原创的⽬的。
即使你使⽤的国外图⽚⽹站,⽐如现在很多⼩伙伴使⽤我之前分享的图⽚站:《24个免费⾼清⽆版权图⽚⽹站让你从此告别侵权困扰收藏必备!》,但是这些站的图⽚也有很多⼈使⽤,所以你上传之前,也应该修改MD5值。
【使⽤⽅法】1、解压下载的⽂件到任意⽬录,⽆需安装,部分杀毒软件可能误报,关闭杀毒软件即可;2、打开解压好的可执⾏⽂件“批量修改图⽚MD5⼯具免费绿⾊版.exe”;3、选择需要修改MD5属性的图⽚⽂件夹;4、修改图⽚保存⽂件夹,千万别保存到原图⽚⽂件夹;5、点击“准备完毕修改”,秒完成,看到没,图⽚md5属性全部修改了。
python实现图片格式转换(tkinter)
python实现图⽚格式转换(tkinter)import osfrom PIL import Imageimport tkinterimport tkinter.filedialogimport tkinter.messageboxclass Window():def__init__(self):self.root = root = ()self.menu = tkinter.Menu(root)self.submenu = tkinter.Menu(self.menu, tearoff=0)self.submenu.add_command(label='作者:君莫笑')root.config(menu=self.submenu)self.Image = tkinter.StringVar()self.Image.set('.bmp')self.mstatus = tkinter.IntVar()self.fstatus = tkinter.IntVar()self.mstatus.set(0)self.fstatus.set(0)self.status = tkinter.StringVar()bel = bel(root, text='输⼊百分⽐')bel.place(x=5, y=5)self.entryNew = tkinter.Entry(root)self.entryNew.place(x=70, y=5)self.checkM = tkinter.Checkbutton(self.root, text='批量转换', command=self.OnCheckM, variable=self.mstatus, onvalue=1, offvalue=0)self.checkM.place(x=5, y=30)bel = bel(root, text='选择⽂件')bel.place(x=5, y=55)self.entryFile = tkinter.Entry(root)self.entryFile.place(x=70, y=55)self.BrowserFileButton = tkinter.Button(root, text='浏览', command=self.BrowserFile)self.BrowserFileButton.place(x=220, y=55)bel = bel(root, text='选择⽬录')bel.place(x=5, y=90)self.entryDir = tkinter.Entry(root, state=tkinter.DISABLED)self.entryDir.place(x=70, y=90)self.BrowserDirButton = tkinter.Button(root, text='浏览', command=self.BrowserDir, state=tkinter.DISABLED) self.BrowserDirButton.place(x=220, y=90)self.checkF = tkinter.Checkbutton(root, text='改变⽂件格式', onvalue=1, offvalue=0, variable=self.fstatus,command=self.OnCheckF)self.checkF.place(x=5, y=120)frame = tkinter.Frame(root, )frame.place(x=10, y=150)self.rBmp = tkinter.Radiobutton(frame, variable=self.Image, value='.bmp', text='BMP', state=tkinter.DISABLED) self.rBmp.pack(anchor='w')self.rJpg = tkinter.Radiobutton(frame, variable=self.Image, value='.jpg', text='JPG', state=tkinter.DISABLED) self.rJpg.pack(anchor='w')self.rPng = tkinter.Radiobutton(frame, variable=self.Image, value='.png', text='PNG', state=tkinter.DISABLED) self.rPng.pack(anchor='w')self.rGif = tkinter.Radiobutton(frame, variable=self.Image, value='.gif', text='GIF', state=tkinter.DISABLED)self.rGif.pack(anchor='w')self.ButtonCov = tkinter.Button(root, text='转换格式', command=self.Conv, )self.ButtonCov.place(x=120, y=180)self.statusLabel = bel(root, textvariable=self.status, fg='red')self.statusLabel.place(x=80, y=220)def OnCheckM(self):if not self.mstatus.get():self.entryDir.config(state=tkinter.DISABLED)self.entryFile.config(state=tkinter.NORMAL)self.BrowserFileButton.config(state=tkinter.NORMAL)self.BrowserDirButton.config(state=tkinter.DISABLED)else:self.entryDir.config(state=tkinter.NORMAL)self.entryFile.config(state=tkinter.DISABLED)self.BrowserFileButton.config(state=tkinter.DISABLED)self.BrowserDirButton.config(state=tkinter.NORMAL)def OnCheckF(self):if not self.fstatus.get():self.rBmp.config(state=tkinter.DISABLED)self.rPng.config(state=tkinter.DISABLED)self.rJpg.config(state=tkinter.DISABLED)self.rGif.config(state=tkinter.DISABLED)else:self.rBmp.config(state=tkinter.NORMAL)self.rPng.config(state=tkinter.NORMAL)self.rJpg.config(state=tkinter.NORMAL)self.rGif.config(state=tkinter.NORMAL)def BrowserFile(self):file = tkinter.filedialog.askopenfilename(title='Python player',filetypes=[('JPG', '*.jpg'), ('BMP', '*.bmp'), ('GIF', '*.gif'), ('PNG', '*.png')])if file:self.entryFile.delete(0, tkinter.END)self.entryFile.insert(tkinter.END, file)def BrowserDir(self):directory = tkinter.filedialog.askdirectory(title='Python')if directory:self.entryDir.delete(0, tkinter.END)self.entryDir.insert(tkinter.END, directory)def make(self, file, format=None):im = Image.open(file)mode = im.modeif mode not in ('L', 'RGB'):im = im.convert('RGB')width, height = im.sizes = self.entryNew.get()if s == '':tkinter.messagebox.showerror('出错啦', '请输⼊百分⽐')returnelse:n = int(s)nwidth = int(width * n / 100)nheight = int(height * n / 100)thumb = im.resize((nwidth, nheight), Image.ANTIALIAS)if format:thumb.save(file[:(len(file) - 4)] + '_thumb' + format)else:thumb.save(file[:(len(file) - 4)] + '_thumb' + file[-4:])def Conv(self):n = 0if self.mstatus.get():path = self.entryDir.get()if path == "":tkinter.messagebox.showerror('出错啦', '请选择路径') returnfilenames = os.listdir(path)if self.fstatus.get():f = self.Image.get()print(f)for filename in filenames:if filename[-3:] in ('bmp', 'jpg', 'gif', 'png'):self.make(path + '/' + filename, f)n += 1else:for filename in filenames:if filename[-3:] in ('bmp', 'jpg', 'gif', 'png'):self.make(path + '/' + filename)n += 1else:file = self.entryFile.get()if file == '':tkinter.messagebox.showerror('出错啦', '请选择⽂件') returnif self.fstatus.get():f = self.Image.get()self.make(file, f)n += 1else:self.make(file)n += 1self.status.set('成功转换 %d 张图⽚' % n)def mainloop(self):self.root.minsize(280, 270)self.root.maxsize(280, 250)self.root.title('图⽚转换')self.root.mainloop()if__name__ == "__main__":window = Window()window.mainloop()。
利用python将webp文件转化为jpg文件,将png文件修改为jpg,图像重命名
利⽤python将webp⽂件转化为jpg⽂件,将png⽂件修改为jpg,图像重命名webp是⾕歌发⾏的⼀种不损伤图像质量的压缩存储⽅式,可有效减⼩图像数据存储空间。
但是在神经⽹络中,常⽤的输⼊图像格式为jpg,所以需要转化,利⽤PIL库⼀、单张图像处理import osfrom PIL import Imagepath = "E:\\newdatas\\data\\try\\991.webp"im=Image.open(path)im.load()im.save("E:\\newdatas\\data\\try\\991.jpg")os.remove(path)我的运⾏环境是win10,所以图像路径格式采⽤双斜线或反斜线,运⾏脚本,可将该图像转化为jpg格式的⽂件存储,并且删除原图像。
代码解析:PIL是python的第三⽅图像处理库。
Image.open(path)是读取图像,但是该操作不读取图像数据,因此如果需要对图像做处理,需要再使⽤Image.load()来强⾏加载图像数据。
使⽤im.save()保存图像,可直接将图像保存成需要的格式。
(不放⼼的话,可以再读取⼀下重新保存的图像,输出其format属性,验证⼀下是否是jpeg)保存完之后删除原图像,直接使⽤os.remove()函数⼆、批量处理import osfrom PIL import Image#图像预处理包括修改图像格式、编号class proimage():def__init__(self):self.path = "E:\\newdatas\\data\\try"#读取⽂件夹下图像def read(self):filelist=os.listdir(self.path)return filelistdef webp2jpg(self,filelist):#查找图像⽅式不同,该函数只查找所有.webp格式的⽂件for item in filelist:if item.endswith('.webp') :src = os.path.join(os.path.abspath(self.path), item)print("src=",src)im=Image.open(src)im.load()save_name=src.replace('webp','jpg')im.save('{}'.format(save_name),'JPEG')os.remove(src)if__name__ == '__main__':newtype = proimage()filelist=newtype.read()newtype.webp2jpg(filelist)三、PNG格式修改为jpgPNG是⼀种⽆损压缩的位图⽚格式,其通道数=4,除了R,G,B外,还有⼀个透明度,因此在修改其格式为jpg时,需要放弃透明度通道。
图片格式转换器小程序版的程序设计及代码示例
图片格式转换器小程序版的程序设计及代码示例为了满足用户对图片格式转换的需求,我们设计了一款图片格式转换器的小程序。
本文将详细介绍该小程序的程序设计及主要代码示例。
一、程序设计概述图片格式转换器小程序的设计目标是提供一个简单而实用的工具,方便用户将图片在不同格式之间进行转换。
用户只需上传待转换的图片,选择目标格式,即可快速完成转换。
程序设计主要包括用户界面设计、图片编解码、格式转换算法以及错误处理等功能。
二、用户界面设计为了使用户操作方便、直观,我们采用了简洁明了的用户界面设计。
主要包括以下几个要素:1. 图片上传按钮:用户点击该按钮可以选择本地图片进行上传;2. 格式选择列表:用户可以通过下拉列表选择目标格式,提供常见的图片格式选项,如JPEG、PNG、GIF等;3. 转换按钮:用户在选择完图片和目标格式后,点击该按钮即可开始进行转换;4. 转换结果展示区域:程序将转换后的图片显示在该区域,便于用户查看转换效果。
三、图片编解码在程序中,我们使用了现有的图片编解码库来处理图片的读取和存储。
例如,对于JPEG格式的图片,可以使用开源库libjpeg来进行编解码操作;对于PNG格式的图片,可以使用libpng等库来实现编解码。
在程序设计过程中,需要根据用户选择的目标格式来确定所需的编码库,并在代码中进行相应调用。
四、格式转换算法图片格式转换涉及到像素数据的重新编码,因此需要实现特定格式间的转换算法。
以下是其中一种简化的算法示例:```pythondef convert_image(image_data, target_format):# 根据目标格式调用相应的编码库进行解码if target_format == "JPEG":# 使用libjpeg库解码图片数据decoded_image = libjpeg.decode(image_data)elif target_format == "PNG":# 使用libpng库解码图片数据decoded_image = libpng.decode(image_data)# 根据目标格式调用相应的编码库进行编码if target_format == "JPEG":# 使用libjpeg库编码图片数据encoded_image = libjpeg.encode(decoded_image)elif target_format == "PNG":# 使用libpng库编码图片数据encoded_image = libpng.encode(decoded_image)return encoded_image```上述示例代码中,根据用户选择的目标格式,调用相应的编码库进行解码和编码操作。
如何分辨图片是不是被PS过
“你的照片被PS过了!”“瞎扯!有本领就找出证据来!”“那个……”不管是朋友晒在博客的帅照,仍是你感爱好的MM图片,或是在淘宝上买东西,你是不是常常有疑问:这照片究竟是不是原汁原味的呢?那个地址教你几招秘籍,狐狸再狡猾,也会露出尾巴的!哈哈!在电脑上看着很漂亮的衣服,得手以后发觉有很多瑕疵,而联系卖家以后,卖家似乎永久都只有一个说明——显示器色差问题,哎,老实说自己是“偷”来的素材PS的多痛快!网上有很多方式判定照片是不是被修悔改,如认真查看照片细节是不是正常、遍地色调是不是融合、光源是不是符合等等,可是这些关于对摄影不熟悉一般的人来讲,无疑难度太大。
如何利用简单的方式识别被PS过的照片呢?一、看图片属性图1图2在图片的文件属性中,有照相机照相时的详细信息,包括快门速度、光圈甚至包括使用的摄影设备型号等等,如果修改过,这些信息就不复存在。
首先右键单击网上的图片,把它保存成为文件,然后右键单击“文件→属性→摘要”(见图一、2)。
图1中包括了照相时的详细信息,而图2中只有图片自身的简单信息,很多内容被作者删除,很有PS后“此地无银三百两”的感觉。
那个方式简单易行,用它对付一样的奸商超级有效。
只是此刻除比较低级的奸商之外,水平稍高的其他奸商很容易利用软件将这些信息修改。
二、搜索让相似图片大曝光图3俗话说“不怕不识货,就怕货比货”,若是把类似的图片进行对照,那么确信能发觉图片的很多问题,比如是不是盗图、是不是修改等。
大伙儿能够利用谷歌图片(照片)搜索,看看有无类似可是不一样的图片(见图3)。
从图3中能够看出,搜索到了很多相关的图片,只是图片稍显凌乱,若是要求不高,能够直接在淘宝中搜索相关图片。
3、用记事本查看图片源码图4开玩笑吧,使用记事本查看图片?听说用画图、浏览器还有什么软件来看图,就是没有听过用记事本来查看。
其实,使用记事本查看图片,就是查看图片的源码。
在图片文件信息的第2行,如果用PS修改,会有相应的信息,包括修改工具、版本修改时间等等(见图4第二行中圈出的部分),这就是狐狸的尾巴啦!4、用JPEGsnoop判定是不是被修改图5多数照片处理软件都会在被处理照片中加入自己的信息,但是如果要将其消去也不是难事。
c#快速修改图片颜色
c#快速修改图⽚颜⾊public static void ChangeColour(this Bitmap bmp, byte inColourR, byte inColourG, byte inColourB, byte outColourR, byte outColourG, byte outColourB){// Specify a pixel format.PixelFormat pxf = PixelFormat.Format24bppRgb;// Lock the bitmap's bits.Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);BitmapData bmpData =bmp.LockBits(rect, ImageLockMode.ReadWrite,pxf);// Get the address of the first line.IntPtr ptr = bmpData.Scan0;// Declare an array to hold the bytes of the bitmap.// int numBytes = bmp.Width * bmp.Height * 3;int numBytes = bmpData.Stride * bmp.Height;byte[] rgbValues = new byte[numBytes];// Copy the RGB values into the array.Marshal.Copy(ptr, rgbValues, 0, numBytes);// Manipulate the bitmapfor (int counter = 0; counter < rgbValues.Length; counter += 3){if (rgbValues[counter] != inColourR &&rgbValues[counter + 1] != inColourG &&rgbValues[counter + 2] != inColourB){rgbValues[counter] = outColourR;rgbValues[counter + 1] = outColourG;rgbValues[counter + 2] = outColourB;}}// Copy the RGB values back to the bitmapMarshal.Copy(rgbValues, 0, ptr, numBytes);// Unlock the bits.bmp.UnlockBits(bmpData);}public unsafe void ChangeColour(ref Bitmap bmp, byte inColourR, byte inColourG, byte inColourB, byte outColourR, byte outColourG, byte outColourB, int k){// Specify a pixel format.PixelFormat pxf = PixelFormat.Format24bppRgb;// Lock the bitmap's bits.System.Drawing.Rectangle rect = new System.Drawing.Rectangle(0, 0, bmp.Width, bmp.Height);BitmapData bmpData =bmp.LockBits(rect, ImageLockMode.ReadWrite,pxf);// Get the address of the first line.var bp =(byte*) bmpData.Scan0.ToPointer();for (int i = 0; i != bmpData.Height; i++){for (int j = 0; j != bmpData.Width; j++){//0.3R+0.59G+0.11Bif (bp[i * bmpData.Stride + j * 3] == inColourB && bp[i * bmpData.Stride + j * 3 + 1] == inColourG && bp[i * bmpData.Stride + j * 3 + 2] == inColourR) {bp[i * bmpData.Stride + j * 3] = outColourB;bp[i * bmpData.Stride + j * 3 + 1] = outColourG;bp[i * bmpData.Stride + j * 3 + 2] = outColourR;//float value = 0.11F * bp[i * bmpData.Stride + j * 3] + 0.59F * bp[i * bmpData.Stride + j * 3 + 1] +// 0.3F * bp[i * bmpData.Stride + j * 3 + 2];}}}bmp.UnlockBits(bmpData);}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
<td align="right" colspan="6" style="text-align: center; width: 972px;">
</td>
</tr>
</head>
<body>
<script language="JavaScript" src="../javascript/calendar.js"></script>
<form id="form1" runat="server">
<table border="0" cellpadding="5" cellspacing="0" width="100%">
<td style="width: 575px;" rowspan="4">
<img alt="暂无照片" src="ShowImage.aspx?ZhuanJiaID=<%=strZhuanJiaID %>" style="width: 89px;" height="120" /></td>
<td align="right" style="height: 24px">
毕业院校</td>
<td style="height: 24px">
<asp:TextBox ID="SchoolTextBox" runat="server" ></asp:TextBox></td>
<td style="width: 50px; height: 24px;">
</td>
</tr>
<tr style="font-size: 9pt">
<td align="right" style="height: 23px">
</tr>
<tr style="font-size: 9pt">
<td align="right" style="height: 24px">
出生日期</td>
<td align="left" colspan="3" style="height: 24px">
<html xmlns="/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
<link href="../javascript/x.css" rel="stylesheet" type="text/css">
<asp:ListItem Value="男">男</asp:ListItem>
<asp:ListItem Value="男">女</asp:ListItem>
</asp:DropDownList></td>
<td style="width: 50px;">
</td>
<td style="width: 250px; text-align: right;" rowspan="4">
原照片</td>
<tr style="font-size: 9pt">
<td align="right" style="width: 250px;">
姓名</td>
<td align="left" colspan="3" style="width: 149px;">
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ZhuanJiaModify.aspx.cs" Inherits="ZhuanJia_ZhuanJiaModify" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd">
最高学位</td>
<td align="left" colspan="3" style="height: 23px">
<asp:DropDownList ID="ddlEduLevel" runat="server">
<link href="../StyleSheet.css" rel="stylesheet" type="text/css">
<script language="javascript" src="../javascript/Area.aspx"></script>
<script language="javascript" src="../javascript/Area.js"></script>
<tr>
<td bgcolor="#4e5a7e" colspan="2" style="height: 18px" valign="bottom">
<span style="font-size: 9pt; color: #ffffff; font-family: Times New Roman"><strong>修改信息</strong></span></td>
</table>
<table bgcolor="#f3f7fa" border="0" cellpadding="5" style="font-size: 100%; font-family: Verdana"
width="100%" cellspacing="0">
</span></strong>
<img align="absMiddle" height="9" src="../Images/sanjiaotwo.gif" style="font-size: 9pt"
width="10" /></td>
<asp:RequiredFieldValidator ID="NameValidator" runat="server" ControlToValidate="NameTextBox"
ErrorMessage="*" SetFocusOnError="True" Width="1px"></asp:RequiredFieldValidator></td>
<asp:ListItem Value="0">博士</asp:ListItem>
<asp:ListItem Value="1">硕士</asp:ListItem>
<asp:TextBox ID="NameTextBox" runat="server"></asp:TextBox></td>
<td align="left" colspan="1" style="width: 12px;">
<td align="right" style="width: 250px;">
性别</td>
<td style="width: 149px;">
<asp:DropDownList ID="ddlSex" runat="server" Width="46px">