急求GIF图像的LZW压缩算法过程

急求GIF图像的LZW压缩算法过程,第1张

LZW数据压缩算法的原理分析

我希望通过本文的介绍,能给那些目前不太了解lzw算法和该算法在gif图像中应用,但渴望了解它的人一些启发和帮助。抛砖引玉而已,更希望园子里面兄弟提出宝贵的意见。

1LZW的全称是什么

Lempel-Ziv-Welch (LZW)

2 LZW的简介和压缩原理是什么?

LZW 压缩算法是一种新颖的压缩方法,由Lemple-Ziv-Welch 三人共同创造,用他们的名字命名。它采用了一种先进的串表压缩,将每个第一次出现的串放在一个串表中,用一个数字来表示串,压缩文件只存贮数字,则不存贮串,从而使图象文件的压缩效率得到较大的提高。奇妙的是,不管是在压缩还是在解压缩的过程中都能正确的建立这个串表,压缩或解压缩完成后,这个串表又被丢弃。

LZW算法中,首先建立一个字符串表,把每一个第一次出现的字符串放入串表中,并用一个数字来表示,这个数字与此字符串在串表中的位置有关,并将这个数字存入压缩文件中,如果这个字符串再次出现时,即可用表示它的数字来代替,并将这个数字存入文件中。压缩完成后将串表丢弃。如"print" 字符串,如果在压缩时用266表示,只要再次出现,均用266表示,并将"print"字符串存入串表中,在图象解码时遇到数字266,即可从串表中查出 266所代表的字符串"print",在解压缩时,串表可以根据压缩数据重新生成。

3在详细介绍算法之前,先列出一些与该算法相关的概念和词汇

1)'Character': 字符,一种基础数据元素,在普通文本文件中,它占用1个单独的byte,而在图像中,它却是 一种代表给定像素颜色的索引值。

2)'CharStream':数据文件中的字符流。

3)'Prefix':前缀。如这个单词的含义一样,代表着在一个字符最直接的前一个字符。一个前缀字符长度可以为0,一个prefix和一个character可以组成一个字符串(string),

4)'Suffix': 后缀,是一个字符,一个字符串可以由(A,B)来组成,A是前缀,B是后缀,当A长度为0的时候,代表Root,根

5)'Code:码,用于代表一个字符串的位置编码

6)'Entry',一个Code和它所代表的字符串(string)

4压缩算法的简单示例,不是完全实现LZW算法,只是从最直观的角度看lzw算法的思想

对原始数据ABCCAABCDDAACCDB进行LZW压缩

原始数据中,只包括4个字符(Character),A,B,C,D,四个字符可以用一个2bit的数表示,0-A,1-B,2-C,3-D,从最直观的角度看,原始字符串存在重复字符:ABCCAABCDDAACCDB,用4代表AB,4代表CC,上面的字符串可以替代表示为:45A4CDDAA5DB,这样是不是就比原数据短了一些呢!

5LZW算法的适用范围

为了区别代表串的值(Code)和原来的单个的数据值(String),需要使它们的数值域不重合,上面用0-3来代表A-D,那么AB就必须用大于3的数值来代替,再举另外一个例子,原来的数值范围可以用8bit来表示,那么就认为原始的数的范围是0~255,压缩程序生成的标号的范围就不能为 0~255(如果是0-255,就重复了)。只能从256开始,但是这样一来就超过了8位的表示范围了,所以必须要扩展数据的位数,至少扩展一位,但是这样不是增加了1个字符占用的空间了么?但是却可以用一个字符代表几个字符,比如原来255是8bit,但是现在用256来表示254,255两个数,还是划得来的。从这个原理可以看出LZW算法的适用范围是原始数据串最好是有大量的子串多次重复出现,重复的越多,压缩效果越好。反之则越差,可能真的不减反增了。

6LZW算法中特殊标记

随着新的串(string)不断被发现,标号也会不断地增长,如果原数据过大,生成的标号集(string table)会越来越大,这时候操作这个集合就会产生效率问题。如何避免这个问题呢Gif在采用lzw算法的做法是当标号集足够大的时候,就不能增大了,干脆从头开始再来,在这个位置要插入一个标号,就是清除标志CLEAR,表示从这里我重新开始构造字典,以前的所有标记作废,开始使用新的标记。

这时候又有一个问题出现,足够大是多大?这个标号集的大小为比较合适呢?理论上是标号集大小越大,则压缩比率就越高,但开销也越高。一般根据处理速度和内存空间连个因素来选定。GIF规范规定的是12位,超过12位的表达范围就推倒重来,并且GIF为了提高压缩率,采用的是变长的字长。比如说原始数据是8位,那么一开始,先加上一位再说,开始的字长就成了9位,然后开始加标号,当标号加到512时,也就是超过9为所能表达的最大数据时,也就意味着后面的标号要用10位字长才能表示了,那么从这里开始,后面的字长就是10位了。依此类推,到了2^12也就是4096时,在这里插一个清除标志,从后面开始,从9位再来。

GIF规定的清除标志CLEAR的数值是原始数据字长表示的最大值加1,如果原始数据字长是8,那么清除标志就是256,如果原始数据字长为4那么就是16。另外GIF还规定了一个结束标志END,它的值是清除标志CLEAR再加1。由于GIF规定的位数有1位(单色图),4位(16色)和8位(256色),而1位的情况下如果只扩展1位,只能表示4种状态,那么加上一个清除标志和结束标志就用完了,所以1位的情况下就必须扩充到3位。其它两种情况初始的字长就为5位和9位。此处参照了http://blogcsdnnet/whycadi/

7用lzw算法压缩原始数据的示例分析

输入流,也就是原始的数据为:255,24,54,255,24,255,255,24,5,123,45,255,24,5,24,54

这个正好可以看到是gif文件中像素数组的一部分,如何对它进行压缩

因为原始数据可以用8bit来表示,故清除标志Clear=255+1 =256,结束标志为End=256+1=257,目前标号集为

0 1 2 3 255 CLEAR END

第一步,读取第一个字符为255,在标记表里面查找,255已经存在,我们已经认识255了,不做处理

第二步,取第二个字符,此时前缀为A,形成当前的Entry为(255,24),在标记集合不存在,我们并不认识255,24好,这次你小子来了,我就记住你,把它在标记集合中标记为258,然后输出前缀A,保留后缀24,并作为下一次的前缀(后缀变前缀)

第三步,取第三个字符为54,当前Entry(24,54),不认识,记录(24,54)为标号259,并输出24,后缀变前缀

第四部:取第四个字符255,Entry=(54,255),不认识,记录(54,255)为标号260,输出54,后缀变前缀

第五步 取第5个字符24,entry=(255,24),啊,认识你,这不是老258么,于是把字符串规约为258,并作为前缀

第六步 取第六个字符255,entry=(258,255),不认识,记录(258,255)为261,输出258,后缀变前缀

一直处理到最后一个字符,

用一个表记录处理过程

CLEAR=256,END=257 第几步 前缀 后缀 Entry 认识(Y/N) 输出 标号

1 255 (,255)

2 255 24 (255,24) N 255 258

3 24 54 (24,54) N 24 259

4 54 255 (54,255) N 54 260

5 255 24 (255,24) Y

6 258 255 (258,255) N 258 261

7 255 255 (255,255) N 255 262

上面这个示例有些不能完整体现,另外一个例子是

原输入数据为:A B A B A B A B B B A B A B A A C D A C D A D C A B A A A B A B

采用LZW算法对其进行压缩,压缩过程用一个表来表述为:

注意原数据中只包含4个character,A,B,C,D

用两bit即可表述,根据lzw算法,首先扩展一位变为3为,Clear=2的2次方+1=4; End=4+1=5;

初始标号集因该为

0 1 2 3 4 5

A B C D Clear End

而压缩过程为:

第几步 前缀 后缀 Entry 认识(Y/N) 输出 标号

1 A (,A)

2 A B (A,B) N A 6

3 B A (B,A) N B 7

4 A B (A,B) Y

5 6 A (6,A) N 6 8

6 A B (A,B) Y

7 6 A (6,A) Y

8 8 B (8,B) N 8 9

9 B B (B,B) N B 10

10 B B (B,B) Y

11 10 A (10,A) N 10 11

12 A B (A,B) Y

当进行到第12步的时候,标号集应该为

0 1 2 3 4 5 6 7 8 9 10 11

A B C D Clear End AB BA 6A 8B BB 10A

8LZW算法的伪代码实现

1STRING = get input character

2WHILE there are still input characters DO

3 CHARACTER = get input character

4 IF STRING+CHARACTER is in the string table then

5 STRING = STRING+character

6 ELSE

7 output the code for STRING

8 add STRING+CHARACTER to the string table

9 STRING = CHARACTER

10 END of IF

11END of WHILE

12output the code for STRING

13

9LZW算法的流程图

没有安visio,画了一个,比较难看,

----------------------------------------------------------------------------------------

using System;

using SystemIO;

namespace GifComponents

{

public class LZWEncoder

{

private static readonly int EOF = -1;

private int imgW, imgH;

private byte[] pixAry;

private int initCodeSize;

private int remaining;

private int curPixel;

// GIFCOMPRC - GIF Image compression routines

//

// Lempel-Ziv compression based on 'compress' GIF modifications by

// David Rowley (mgardi@watdcsuwaterlooedu)

// General DEFINEs

static readonly int BITS = 12;

static readonly int HSIZE = 5003; // 80% occupancy

// GIF Image compression - modified 'compress'

//

// Based on: compressc - File compression ala IEEE Computer, June 1984

//

// By Authors: Spencer W Thomas (decvax!harpo!utah-cs!utah-gr!thomas)

// Jim McKie (decvax!mcvax!jim)

// Steve Davies (decvax!vax135!petsd!peora!srd)

// Ken Turkowski (decvax!decwrl!turtlevax!ken)

// James A Woods (decvax!ihnp4!ames!jaw)

// Joe Orost (decvax!vax135!petsd!joe)

int n_bits; // number of bits/code

int maxbits = BITS; // user settable max # bits/code

int maxcode; // maximum code, given n_bits

int maxmaxcode = 1 << BITS; // should NEVER generate this code

int[] htab = new int[HSIZE];//这个是放hash的筒子,在这里面可以很快的找到1个key

int[] codetab = new int[HSIZE];

int hsize = HSIZE; // for dynamic table sizing

int free_ent = 0; // first unused entry

// block compression parameters -- after all codes are used up,

// and compression rate changes, start over

bool clear_flg = false;

// Algorithm: use open addressing double hashing (no chaining) on the

// prefix code / next character combination We do a variant of Knuth's

// algorithm D (vol 3, sec 64) along with G Knott's relatively-prime

// secondary probe Here, the modular division first probe is gives way

// to a faster exclusive-or manipulation Also do block compression with

// an adaptive reset, whereby the code table is cleared when the compression

// ratio decreases, but after the table fills The variable-length output

// codes are re-sized at this point, and a special CLEAR code is generated

// for the decompressor Late addition: construct the table according to

// file size for noticeable speed improvement on small files Please direct

// questions about this implementation to ames!jaw

int g_init_bits;

int ClearCode;

int EOFCode;

// output

//

// Output the given code

// Inputs:

// code: A n_bits-bit integer If == -1, then EOF This assumes

// that n_bits =< wordsize - 1

// Outputs:

// Outputs code to the file

// Assumptions:

// Chars are 8 bits long

// Algorithm:

// Maintain a BITS character long buffer (so that 8 codes will

// fit in it exactly) Use the VAX insv instruction to insert each

// code in turn When the buffer fills up empty it and start over

int cur_accum = 0;

int cur_bits = 0;

int [] masks =

{

0x0000,

0x0001,

0x0003,

0x0007,

0x000F,

0x001F,

0x003F,

0x007F,

0x00FF,

0x01FF,

0x03FF,

0x07FF,

0x0FFF,

0x1FFF,

0x3FFF,

0x7FFF,

0xFFFF };

// Number of characters so far in this 'packet'

int a_count;

// Define the storage for the packet accumulator

byte[] accum = new byte[256];

//----------------------------------------------------------------------------

public LZWEncoder(int width, int height, byte[] pixels, int color_depth)

{

imgW = width;

imgH = height;

pixAry = pixels;

initCodeSize = MathMax(2, color_depth);

}

// Add a character to the end of the current packet, and if it is 254

// characters, flush the packet to disk

void Add(byte c, Stream outs)

{

accum[a_count++] = c;

if (a_count >= 254)

Flush(outs);

}

// Clear out the hash table

// table clear for block compress

void ClearTable(Stream outs)

{

ResetCodeTable(hsize);

free_ent = ClearCode + 2;

clear_flg = true;

Output(ClearCode, outs);

}

// reset code table

// 全部初始化为-1

void ResetCodeTable(int hsize)

{

for (int i = 0; i < hsize; ++i)

htab = -1;

}

void Compress(int init_bits, Stream outs)

{

int fcode;

int i / = 0 /;

int c;

int ent;

int disp;

int hsize_reg;

int hshift;

// Set up the globals: g_init_bits - initial number of bits

//原始数据的字长,在gif文件中,原始数据的字长可以为1(单色图),4(16色),和8(256色)

//开始的时候先加上1

//但是当原始数据长度为1的时候,开始为3

//因此原始长度1->3,4->5,8->9

//为何原始数据字长为1的时候,开始长度为3呢?

//如果+1=2,只能表示四种状态,加上clearcode和endcode就用完了。所以必须扩展到3

g_init_bits = init_bits;

// Set up the necessary values

//是否需要加清除标志

//GIF为了提高压缩率,采用的是变长的字长(VCL)。比如说原始数据是8位,那么开始先加上1位(8+1=9)

//当标号到2^9=512的时候,超过了当前长度9所能表现的最大值,此时后面的标号就必须用10位来表示

//以此类推,当标号到2^12的时候,因为最大为12,不能继续扩展了,需要在2^12=4096的位置上插入一个ClearCode,表示从这往后,从9位重新再来了

clear_flg = false;

n_bits = g_init_bits;

//获得n位数能表述的最大值(gif图像中开始一般为3,5,9,故maxcode一般为7,31,511)

maxcode = MaxCode(n_bits);

//表示从这里我重新开始构造字典字典了,以前的所有标记作废,

//开始使用新的标记。这个标号集的大小多少比较合适呢?据说理论上是越大压缩率越高(我个人感觉太大了也不见得就好),

//不过处理的开销也呈指数增长

//gif规定,clearcode的值为原始数据最大字长所能表达的数值+1;比如原始数据长度为8,则clearcode=1<<(9-1)=256

ClearCode = 1 << (init_bits - 1);

//结束标志为clearcode+1

EOFCode = ClearCode + 1;

//这个是解除结束的

free_ent = ClearCode + 2;

//清楚数量

a_count = 0; // clear packet

//从图像中获得下一个像素

ent = NextPixel();

hshift = 0;

for (fcode = hsize; fcode < 65536; fcode = 2)

++hshift;

//设置hash码范围

hshift = 8 - hshift; // set hash code range bound

hsize_reg = hsize;

//清除固定大小的hash表,用于存储标记,这个相当于字典

ResetCodeTable(hsize_reg); // clear hash table

Output(ClearCode, outs);

outer_loop : while ((c = NextPixel()) != EOF)

{

fcode = (c << maxbits) + ent;

i = (c << hshift) ^ ent; // xor hashing

//嘿嘿,小样,又来了,我认识你

if (htab == fcode)

{

ent = codetab;

continue;

}

//这小子,新来的

else if (htab >= 0) // non-empty slot

{

disp = hsize_reg - i; // secondary hash (after G Knott)

if (i == 0)

disp = 1;

do

{

if ((i -= disp) < 0)

i += hsize_reg;

if (htab == fcode)

{

ent = codetab;

goto outer_loop;

}

} while (htab >= 0);

}

Output(ent, outs);

//从这里可以看出,ent就是前缀(prefix),而当前正在处理的字符标志就是后缀(suffix)

ent = c;

//判断终止结束符是否超过当前位数所能表述的范围

if (free_ent < maxmaxcode)

{

//如果没有超

codetab = free_ent++; // code -> hashtable

//hash表里面建立相应索引

htab = fcode;

}

else

//说明超过了当前所能表述的范围,清空字典,重新再来

ClearTable(outs);

}

// Put out the final code

Output(ent, outs);

Output(EOFCode, outs);

}

//----------------------------------------------------------------------------

public void Encode( Stream os)

{

osWriteByte( ConvertToByte( initCodeSize) ); // write "initial code size" byte

//这个图像包含多少个像素

remaining = imgW imgH; // reset navigation variables

//当前处理的像素索引

curPixel = 0;

Compress(initCodeSize + 1, os); // compress and write the pixel data

osWriteByte(0); // write block terminator

}

// Flush the packet to disk, and reset the accumulator

void Flush(Stream outs)

{

if (a_count > 0)

{

outsWriteByte( ConvertToByte( a_count ));

outsWrite(accum, 0, a_count);

a_count = 0;

}

}

/// <summary>

/// 获得n位数所能表达的最大数值

/// </summary>

/// <param name="n_bits">位数,一般情况下n_bits = 9</param>

/// <returns>最大值,例如n_bits=8,则返回值就为2^8-1=255</returns>

int MaxCode(int n_bits)

{

return (1 << n_bits) - 1;

}

//----------------------------------------------------------------------------

// Return the next pixel from the image

//----------------------------------------------------------------------------

/// <summary>

/// 从图像中获得下一个像素

/// </summary>

/// <returns></returns>

private int NextPixel()

{

//还剩多少个像素没有处理

//如果没有了,返回结束标志

if (remaining == 0)

return EOF;

//否则处理下一个,并将未处理像素数目-1

--remaining;

//当前处理的像素

int temp = curPixel + 1;

//如果当前处理像素在像素范围之内

if ( temp < pixAryGetUpperBound( 0 ))

{

//下一个像素

byte pix = pixAry[curPixel++];

return pix & 0xff;

}

return 0xff;

}

/// <summary>

/// 输出字到输出流

/// </summary>

/// <param name="code">要输出的字</param>

/// <param name="outs">输出流</param>

void Output(int code, Stream outs)

{

//得到当前标志位所能表示的最大标志值

cur_accum &= masks[cur_bits];

if (cur_bits > 0)

cur_accum |= (code << cur_bits);

else

//如果标志位为0,就将当前标号为输入流

cur_accum = code;

//当前能标志的最大字长度(9-10-11-12-9-10。。。。。。。)

cur_bits += n_bits;

//如果当前最大长度大于8

while (cur_bits >= 8)

{

//向流中输出一个字节

Add((byte) (cur_accum & 0xff), outs);

//将当前标号右移8位

cur_accum >>= 8;

cur_bits -= 8;

}

// If the next entry is going to be too big for the code size,

// then increase it, if possible

if (free_ent > maxcode || clear_flg)

{

if (clear_flg)

{

maxcode = MaxCode(n_bits = g_init_bits);

clear_flg = false;

}

else

{

++n_bits;

if (n_bits == maxbits)

maxcode = maxmaxcode;

else

maxcode = MaxCode(n_bits);

}

}

if (code == EOFCode)

{

// At EOF, write the rest of the buffer

while (cur_bits > 0)

{

Add((byte) (cur_accum & 0xff), outs);

cur_accum >>= 8;

cur_bits -= 8;

}

Flush(outs);

}

}

}

}

1 关于作者署名我们实验室从师兄开始,发的SCI基本上都是参与者有谁就挂谁的,基本不挂关系户。这一次,我也是仿照以往的情况署上了作者的名字,但是漏掉了给做好前期工作现在已经毕业读博士去的师兄,和我的这个课题的实际申请人L教授。漏掉师兄,很不应该,但是关于L教授,是我事先根本没有想到的。因为L教授已经从我们学校调走已经一年多,早已和课题组没有太大的联系,关于他和我们这个课题的关系我也不甚清楚,所以真的没有想到要把他加上。因此,在这里,我要提醒给位初次投稿的虫友们,写文章投稿之前一定要把作者的署名确定好,尽量去问问老板的意思,自己也要思量周全,也许你很反感增加关系户,但是你不应该漏掉每一个对文章有实际或者潜在贡献的人。我的文章在投稿之前老板并没有就这些问题细看,所以后来发现的时候也晚了,因此,我觉得,也许老板不会给你审稿,但是关于文章的一些原则性的问题他们还是能把握的,所以尽量投稿之前还是给老板看看,如果最后出现像我这样的问题就满郁闷了,因为越到后面增加作者一直是一件满敏感的事情。关于这一点的解决方法我在后面说。此外,在我的初稿中,老板是第二作者加通讯作者。修改意见回来后,我在他心情好的时候问了下能不能把他放到后面,他同意了(后来实验室也开始沿用这个做法)。这样的做法是可以让周围的同学成为第二作者,而且也许同学写文章的时候你也有成为第二作者的可能,尽管很多学校不会因为第二作者算你的文章,但是对于出国或者是找一般企业工作的人来说,多一篇第二作者的文章也是聊胜于无的事情(尽管很多老板现在都是这样做的,但是我想,万事也都有个开头)。于是,在修改稿的时候把老板的名字换到了最后,其他人都往前进行了挪动,在response里面也没有提这个事情,最后一点问题也没有。2 关于质量这个问题论坛上问的虫子也很多。很多期刊要求质量到600dpi并且要TIF格式。其实可以通过PS或者corel draw等作图软件导出这个,然后导出的时候选择TIF格式和600dpi,再选在LZW压缩,另外把尺寸改小一点(10000X10000的可以改到2000X2000就够用了,太大的话一张几十兆)3 关于Supporting InformationSupporting Information是ACS下面期刊常见的部分,一般在文章的末尾处会有著名。内容一般是一些私下提交给审稿人的参考信息(例如详细的实验过程、实验数据等)但是不在文章里面发表的(有的是为了保密又得是为了简洁)。当时我由于经验不足,把一个不属于这个范畴的东西当成了Supporting Information传了过去,当然,审稿的时候没有造成什么影响,但是编辑在回复里面却让我按照模版把Supporting Information这一章节补上。这个时候我才去看Supporting Information到底是什么,才知道原来自己摆了乌龙。唉,现在想想就觉得好笑。没有办法,只有跟编辑写信问询,申请不写Supporting Information,并承认自己前期的错误,好在编辑啥也没说就同意了(实际上这些信件是助编处理的)。4 关于Table of Contents Graphic关于这一点经常看见有虫子在问。这个并不是ACS下面独有的,貌似RSC及其他出版集团下面也有这个要求。我当时也不太清楚这个东西到底是啥。后来去看了别人的文章才知道没有什么神秘的,实际上就是一张你文章中有代表性的而已(可以是示意图也可是是电镜,也肯以将文章里面的几个图合在一起编辑成新图)。ACS的TOC除了一张图以外还要有一段不超过60words的说明。也就是简要说明你文章的中心思想就行了。TOC在初稿的时候并不如何强调标准,但是在修改稿的时候非常重要。而且修改稿的时候可以对初稿的TOC进行改动,不用对编辑说明也行的(我就完全改了图,还改了不少单词)。5 关于copyright3,4,5这三条都是编辑在审稿意见回来之后要求一定要弄好的重点。Copyright任何投稿都会遇到,也经常看到虫子问copyright的问题,无非是关于提交copyright的时间和里面的一些具体地方怎么填,还有就是如何给编辑。我在初稿的时候直接忽略掉的copyright,因为我看木虫上有人说copyright只是在接收后才有实际意义,那么也就是说晚点交copyright并不影响我正常的审稿。因此,对于大家来说,如果没有特别的要求的,一般不用太早提交copyright。Copyright的填写主要还是用pdf软件在上面直接打字,只需要在“Original Signature(s)”这里亲笔写上和你文章作者顺序一致的作者的英文名就行了。另外,也许你会碰到“Print Authorized Name(s) and Title(s)”这样的文字,Title的意思相当于作者的身份。例如:张三是教授,李四是硕士,那么这里就用软件打上“San Zhang (Professor),Si Li (Master)”就行了。版权填好以后扫描后传给编辑(我是扫描成然后把做成PDF传回的)。6 关于通讯作者邮箱在我投稿之前,我仅仅认为通讯作者邮箱就是一个邮箱而已,就是老板邮箱的代名词,没有认真的对待,但是恰恰通讯作者邮箱让我大涨了一番见识。我也是投稿之前用的是老板的126邮箱。后来在投稿20天后突然莫名的收到了审稿意见回复(系统上突然从第二部飞到了第五步),当时真是十分惊讶。忙问老板,老板打开他又想一看,才发现早在10天以前编辑就发邮件给通讯作者邮箱说正在邀请审稿让我耐心等待了…郁闷…白担心会被编辑直接砍掉了。后来由于又要给编辑问询,又怕还出这样的事情,于是乎起了更换通讯作者邮箱的念头,老板也没有意见,于是在修改的时候直接在系统中作者信息那把通讯作者邮箱换成了我注册的一个新邮箱(我设置的密码)。关于更换通讯作者邮箱,我犹豫了好久是否再给编辑问询信,后来想想怕把编辑惹毛(前面因为Supporting Information已经问询一次了)就算了。庆幸的是,编辑啥也没说,顺利搞定。因此,建议各位初次投稿的虫子,特别是自己写文章自己投的虫子,通讯作者是老板的,没错,但是通讯作者邮箱最好用自己的或者自己帮老板申请一个新的,专门对付这次投稿(当然,你有本事的话要到老板邮箱密码也行)。这样的话后期你就不会像我一样郁闷了,并且处理一些事情的时候会快很多(试想一下,当一封重要邮件躺老板邮箱里面,老板又联系不上或者不方便转给你会不会郁闷?)。因为,投稿过程中,编辑只会和通讯作者联系的。7 关于是“大修”还是“小修”我发现很多虫子很关心这问题,仿佛大修接收的可能性一半对一半,小修的可能性就到8成了,而修改重投就是没有希望的。其实,能不能接收关键在于你能不能按照审稿人的意见好好修改,而并不是“大修”还是“小修”。这些词并不像“如朕亲临”的金牌那么神奇。另外,我们也不能忽略除了大修小修以外的一个情况“修改后重投”,其实只要改好了,重投也是很有希望的,所以很多是这个状态的虫子完全不用灰心,相反应该振作起来,一举攻克最后一关。总的来说,论坛上就有小修不重视,不按照审稿人意见修改而被拒稿的(审稿人觉得自己被忽视了),也有被编辑打回重投,但是按照审稿人意见修改好后重投直接接收的。所以,希望刚投稿的虫子们多注意本质(怎么修改),少在乎现象(是大修还是小修)。8 关于英语的修改看到很多虫子问英语不过关,怎么修改的问题。我说说我的经历。两个审稿人给我的审稿意中,英语评价都是Fair,说“有很多的文字错误”让我修改(实际只举出2个)。其实很多情况下是审稿人对母语非英语的作者的偏见而已。为了认真修改,我找了师兄帮我改了一遍。找了老板,请他找他美国的同学帮忙再改。综合两者的意见最后敲定。最后在修改稿原文中把修改过的地方全部用红笔标出,并且在response中逐条列举出:P1, L15 (gas) → P2, L15 (gases),以显示自己的确对文章的语言进行了认真修改。最后,很顺利,两个审稿人都没有就语言说什么。9 关于引用未出版的参考文献这个问题在论坛上也看过几次了。我这次也碰到了,和大家说说。我有篇重要文献还没有出版,俺引用了,后面用的是“in press”代替。但是后来想想不对,参考文献只有作者的名字(而且是中国人的文章,名是简写的),没有页码卷数,没有标题,要别人怎么搜?10 关于二审到接收的等待时间这一点,太多的虫子揪心了。几乎天天都有虫子问这个。我也很理解大家的心情,毕竟我也是大家中的一员。但是修改稿投出后我恨不得每天刷新100次邮箱。一周后还没有消息,人就开始十分焦急,情绪低落。其实,我和大家一样,因为在论坛上看了一些说修改后当天接收或者一周接收之类的帖子,认为这个时间就是定理,才会这么着急的。另外,我们也都有一个惯性思想就是审稿意见也就那么长时间(1,2个月,难道二审要1个月以上不成)。实际上,事实正有可能如此,甚至我看到的绝大部分情况都是超过一个月甚至更长时间接收的。因为,对于有可能接收的稿件,也要考虑出版的安排以及编辑手头的工作量等诸多问题。在这里我很感谢Thomas2000大哥当时对我安慰,他和我投一个期刊,是1个月大修变小修,小修到接收整整四个月,并且说“没有消息就是好消息”。算是平复了我焦急的心理。俺甚至还趁这段时间去外地玩了半个月,呵呵。11 关于增加作者前面第1点说到了我没有把师兄和L教授列为作者的事情。修改的时候也没有增加(其实修改的时候是很好的增加作者的机会),接收以后才发现了漏掉了师兄(但是还是没想起来L教授,汗)。这个情况相信也有虫子遇到过。这个时候我是先直接写信和期刊的主编联系(不是出版编辑部,尽管这个时候稿件已经转到出版编辑部准备排版了),叙述了自己的疏忽以及师兄的一些贡献(做了很多前期的研究,并且提供了很多理论依据),最后附上一句“不知您是否能允许我们弥补我们的疏忽”(具体写法参加二楼的附件3)。发过去后编辑很快同意了(加为二作)。但是我还是漏掉了L教授,这个也是我的一大遗憾。后来在校样的时候在尝试这一招就不管用了,编辑拒绝。所以,希望大家在刚开始的时候把作者什么的都决定好,省得后面一堆麻烦。就算要加也要在修改的时候加,过了修改的话也行,但是要写尽快联系编辑,机会只有一次。对了,申请加作者的同时一定要附上新的版权哦~~12 关于更换插图我是接收了以后才发现期刊的彩印是免费的(汗),于是在接收后去信给编辑更换彩色示意图,并附上了(和增加作者在一起写的一封邮件,具体写法参加二楼的附件3)。编辑很快同意了,没有什么问题。我说这个只是想说明大家初稿或者修改的时候最好把这些都考虑好,不要像我一样弄的焦头烂额不得安宁。13 关于校样ACS的校样非常人性化,编辑帮我修改的很多语言上的问题,然后排版,并把修改的地方做出了标示。基本没有什么问题,只需要三言两语回封信就可以了。14 还有一点经验之谈不要说俺迷信,哪怕没有金币,俺现在看着祝福文章顺利接收的帖子是必顶的,看到被拒稿的肯定要安慰一番,觉得为别人送上祝福和安慰我自己也会好受一些,也许人品也会提高一些,下次发文也有信心一些,呵呵。当时,也正是很多虫子在我修改的时候给我鼓励和帮助,才使得我最后有信心有动力修改了文章并且顺利接收。多关心鼓励下别人,你也会得到一丝快乐,总有一天,幸福的事情也会降临在你头上,阿窗~~~总结:其实讲了这么多没有谈什么投稿的经验,大多是教训,而且是拿个人在做反面教材,希望大家不要犯和我相同的错误,能少走点弯路,能够在投稿过程中保持一种平和的心态。说的很乱,大家可挑感兴趣的看。最后,祝投稿顺利

  流行经典手机铃声↓

  讲不出再见-谭咏麟http://wwwydlywnet/gangtai/jbczjhtm

  千千阙歌-陈慧娴http://wwwydlywnet/gangtai/qqqghtm

  一个人的精彩-萧亚轩http://wwwydlywnet/gangtai/ygrdjchtm

  千里之外-周杰伦http://wwwydlywnet/gangtai/qlzwhtm

  无可取代-弦子http://wwwydlywnet/gangtai/wkqdhtm

  亲爱的那不是爱情http://wwwydlywnet/gangtai/qadnbsaqhtm

  赤壁醉-林俊杰http://wwwydlywnet/gangtai/chibizuihtm

  给我一首歌的时间http://wwwydlywnet/gangtai/geiwoyishougedeshijianhtm

  别说-李玖哲http://wwwydlywnet/gangtai/bieshuohtm

  比你贱-SHE http://wwwydlywnet/gangtai/binijianhtm

  永远几远-王菀之http://wwwydlywnet/gangtai/yongyuanjiyuanhtm

  难说再见-群星http://wwwydlywnet/gangtai/nanshuozaijinahtm

  稻香-周杰伦http://wwwydlywnet/gangtai/daoxianghtm

  兄弟-刘德华http://wwwydlywnet/gangtai/xiongdihtm

  他慈我悲-李克勤http://wwwydlywnet/gangtai/taciwobeihtm

  该死的温柔-马天宇http://wwwydlywnet/gangtai/gaisidewenrouhtm

  我们就到这-梁静茹http://wwwydlywnet/gangtai/womenjiudaozhehtm

  永远的快乐-张惠妹http://wwwydlywnet/gangtai/yongyuandekuailehtm

  爱死了昨天-李慧珍http://wwwydlywnet/gangtai/aisilzuotianhtm

  我不是伟人-陈小春http://wwwydlywnet/gangtai/wobushiweirenhtm

  爱转角-罗志祥http://wwwydlywnet/gangtai/aizhunjiaohtm

  放生-范逸臣http://wwwydlywnet/gangtai/fangshenghtm

  生死不离-成龙http://wwwydlywnet/gangtai/shengshibulihtm

  everyone is no1刘德华 http://wwwydlywnet/gangtai/no1htm

  投名状-刘德华http://wwwydlywnet/gangtai/toumingzhuanghtm

  女孩当自强-SHE http://wwwydlywnet/gangtai/nvhaidangziqianghtm

  青花瓷-周杰伦http://wwwydlywnet/gangtai/qinghuacihtm

  我们说好的-张靓颖http://wwwydlywnet/gangtai/womenshuohaodehtm

  霍元甲-周杰伦http://wwwydlywnet/gangtai/huoyuanjiahtm

  摇滚怎么了-王力宏http://wwwydlywnet/gangtai/yaogunzenmelhtm

  改变自己-王力宏http://wwwydlywnet/gangtai/gaibianzijihtm

  牛仔很忙-周杰伦http://wwwydlywnet/gangtai/niuzaihenmanghtm

  如果你也听说-张惠妹http://wwwydlywnet/gangtai/ruguoniyetingshuohtm

  北京欢迎你-群星http://wwwydlywnet/gangtai/beijinghuanyingninhtm

  眼睛不能没眼泪-古巨基http://wwwydlywnet/gangtai/yanjingbunengmeiyouyanleihtm

  搞笑手机铃声↓

  东成西就-张学友 http://wwwydlywnet/gaoxiao/dongchengxijiuhtm

  搞笑-鬼子进村 http://wwwydlywnet/gaoxiao/guizijinchunhtm

  麦兜-秋生 http://wwwydlywnet/gaoxiao/maidouqiushenghtm

  爆笑宝宝-等我有钱了 http://wwwydlywnet/gaoxiao/baobaogaoxiaohtm

  Nokia版电量低 http://wwwydlywnet/gaoxiao/nnokiapowerhtm

  跑跑卡丁车 http://wwwydlywnet/gaoxiao/paopaokadinghtm

  我是帅哥 http://wwwydlywnet/gaoxiao/woshishuaigehtm

  小日本 http://wwwydlywnet/gaoxiao/xiaoribenhtm

  主人那家伙又来电话了 http://wwwydlywnet/gaoxiao/najiahuohtm

  主人股市有新行情啦 http://wwwydlywnet/gaoxiao/zhurengushihtm

  我是美女 http://wwwydlywnet/gaoxiao/woshimeinvhtm

  我的确是个有钱人 http://wwwydlywnet/gaoxiao/youqianrenhtm

  畜生大合唱 http://wwwydlywnet/gaoxiao/chushengdahechanghtm

  哇塞电话又来了 http://wwwydlywnet/gaoxiao/wasaidianhualailehtm

  世上只有妈妈好 http://wwwydlywnet/gaoxiao/sszyyoumamahaohtm

  搞笑吉祥三宝 http://wwwydlywnet/gaoxiao/jixiangsanbaohtm

  狗之歌 http://wwwydlywnet/gaoxiao/gouzhigehtm

  找老虎 http://wwwydlywnet/gaoxiao/zhaolaohuhtm

  大哥那妞来电话了http://wwwydlywnet/gaoxiao/naniulaidianhuahtm

  天气乱报 http://wwwydlywnet/gaoxiao/tianqiluanbaohtm

  北方话 http://wwwydlywnet/gaoxiao/beifanghuahtm

  Baby笑声 http://wwwydlywnet/gaoxiao/babyxiaoshenhtm

  唐僧训徒 http://wwwydlywnet/gaoxiao/tangshengxuntuhtm

  笑的你肚子痛 http://wwwydlywnet/gaoxiao/xiaodaonidizitonghtm

  中央***用的铃声http://wwwydlywnet/gaoxiao/zhongyanglingdaoyonghtm

  吃票子四川方言 http://wwwydlywnet/gaoxiao/chipiaozihtm

  光棍专用 http://wwwydlywnet/gaoxiao/guanggunzyonghtm

  两只苍蝇 http://wwwydlywnet/gaoxiao/liangzhichangyinghtm

  欧美流行手机铃声↓

  My Heart Will Go On http://wwwydlywnet/oumei/myheartwillgoonhtm

  Tears In Heaven http://wwwydlywnet/oumei/tearsinheavenhtm

  Never Let Me Go http://wwwydlywnet/oumei/neverletmegohtm

  Baby Be Mine http://wwwydlywnet/oumei/babybeminehtm

  everytime-simple plan http://wwwydlywnet/oumei/everytimehtm

  Beat it-迈克尔 杰克逊 http://wwwydlywnet/oumei/beatithtm

  Billie jean杰克逊 http://wwwydlywnet/oumei/billiejeanhtm

  One Love-Blue http://wwwydlywnet/oumei/OneLovehtm

  cheating http://wwwydlywnet/oumei/cheatinghtm

  we just laugh about http://wwwydlywnet/oumei/we%20just%20laugh%20abouthtm

  I miss you http://wwwydlywnet/oumei/I%20miss%20youhtm

  听起来舒服 http://wwwydlywnet/oumei/tingqishufuhtm

  影视歌曲手机铃声↓

  周大侠-大灌篮主题曲 http://wwwydlywnet/yingshi/zhoudaxiahtm

  彩虹-命运呼叫转移主题曲 http://wwwydlywnet/yingshi/caihonghtm

  我很好-奋斗主题曲 http://wwwydlywnet/yingshi/fendouzhutiquhtm

  静静的-深情密码主题曲 http://wwwydlywnet/yingshi/shenqingmimazhutiquhtm

  七仔-长江七号主题曲 http://wwwydlywnet/yingshi/qizizhutiquhtm

  心愿便利贴-命中注定我爱你主题曲 http://wwwydlywnet/yingshi/mzzdwoanzhutiquhtm

  预感-功夫之王主题曲 http://wwwydlywnet/yingshi/gongfuzhiwangzhutiquhtm

  勇敢飞-精舞门主题曲 http://wwwydlywnet/yingshi/jingwumenzhutiquhtm

  心战-赤壁主题曲 http://wwwydlywnet/yingshi/chibizhutiquhtm

  Kong Fu Fighting-功夫熊猫主题曲 http://wwwydlywnet/yingshi/gongfuzhutiquhtm

  小乌龟微笑-PASTA主题曲 http://wwwydlywnet/yingshi/xiaowuguihtm

  我们的纪念-放羊的星星 http://wwwydlywnet/yingshi/fangyangdexingxinghtm

  sha la la-浪漫满屋插曲 http://wwwydlywnet/gangtai/sha%20la%20lahtm

  never say goodbye my girl-兄妹契约 http://wwwydlywnet/yingshi/neversaygoodbyemygirlhtm

  灌篮高手主题曲 http://wwwydlywnet/gangtai/guanlangaoshouhtm

  命运-浪漫满屋主题曲 http://wwwydlywnet/gangtai/mingyunhtm

  河东狮吼经典 http://wwwydlywnet/yingshi/hedongsihouhtm

  NBA主题曲(I+still+believe) http://wwwydlywnet/yingshi/nbazhutiquhtm

  你爱我像谁-鹿鼎记 http://wwwydlywnet/yingshi/niaiwoxiangshuihtm

  说爱我-战神 http://wwwydlywnet/yingshi/shuoaiwozhanshenhtm

  遗失的美好-海豚湾恋人 http://wwwydlywnet/yingshi/yishidemeihaohtm

  真爱-王子变青蛙 http://wwwydlywnet/yingshi/zhenaihtm

欢迎分享,转载请注明来源:浪漫分享网

原文地址:https://hunlipic.com/langman/3345188.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-08-14
下一篇2023-08-14

发表评论

登录后才能评论

评论列表(0条)

    保存