Image size of Infrared JPEG Color Camera Module

I am using Infrared JPEG Color Camera Module Serial UART (TTL level) for my project. It take photos and write to the SD card. But it takes about 1min. 45sec. time per photo. That photo is about 65kb and 640480 in size. I tried to reduce the size to 160120.

This is my code

#include <SoftwareSerial.h>
#include <SD.h>
 
byte ZERO = 0x00;
 
byte incomingbyte;
SoftwareSerial mySerial(5,6);          // Set Arduino pin 4 and 5 as softserial
 
long int a=0x0000,j=0,k=0,count=0,i=0;
uint8_t MH,ML;
boolean EndFlag=0;

 
File  myFile;
 
void SendResetCmd();
void SetBaudRateCmd();
void SetImageSizeCmd();
void SendTakePhotoCmd();
void SendReadDataCmd();
void StopTakePhotoCmd();

void setup()
{
 
Serial.begin(38400);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
 
mySerial.begin(38400);
 
Serial.print("Initializing SD card...");
// On the Ethernet Shield, CS is pin 4. It's set as an output by default.
// Note that even if it's not used as the CS pin, the hardware SS pin
// (10 on most Arduino boards, 53 on the Mega) must be left as an output
// or the SD library functions will not work.
pinMode(10, OUTPUT);
 
if (!SD.begin(4)) {
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");
 
}

int sizeChange = 0;

void loop()
{

byte a[32];
int ii;
 
SendResetCmd();
delay(200);//4000                            //Wait 2-3 second to send take picture command

  if (sizeChange==0) {
    SetImageSizeCmd();
    Serial.println("Size Changed");
    sizeChange++;
  }



SendTakePhotoCmd();

while(mySerial.available()>0)
{
incomingbyte=mySerial.read();
}
 
myFile = SD.open("pic5.jpg", FILE_WRITE); //<strong><span style="color: #ff0000;">The file name should not be too long</span></strong>
 
while(!EndFlag)
{
j=0;
k=0;
count=0;

SendReadDataCmd();
 
delay(70); //250 for regular //20
 
while(mySerial.available()>0)
{
incomingbyte=mySerial.read();
k++;
if((k>5)&&(j<32)&&(!EndFlag))
{
a[j]=incomingbyte;
if((a[j-1]==0xFF)&&(a[j]==0xD9))     //tell if the picture is finished
EndFlag=1;
j++;
count++;
}
}
 
for(j=0;j<count;j++)
{
if(a[j]<0x10)
Serial.print("0");
Serial.print(a[j],HEX);           // observe the image through serial port
Serial.print(" ");
}
 
for(ii=0; ii<count; ii++)
myFile.write(a[ii]);
 
Serial.println();
 
i++;
 
}
 
myFile.close();

Serial.print("Finished writing data to file");
 
while(1);
 
}
 
void SendResetCmd()
{
mySerial.write(0x56);
mySerial.write(ZERO);
mySerial.write(0x26);
mySerial.write(ZERO);
}
 
void SetImageSizeCmd()
{
mySerial.write(0x56);
mySerial.write(ZERO);
mySerial.write(0x31);
mySerial.write(0x05);
mySerial.write(0x04);
mySerial.write(0x01);
mySerial.write(ZERO);
mySerial.write(0x19);
mySerial.write(0x22);
}
 
void SetBaudRateCmd()
{
mySerial.write(0x56);
mySerial.write(ZERO);
mySerial.write(0x24);
mySerial.write(0x03);
mySerial.write(0x01);
mySerial.write(0x2A);
mySerial.write(0xC8);
 
}
 
void SendTakePhotoCmd()
{
mySerial.write(0x56);
mySerial.write(ZERO);
mySerial.write(0x36);
mySerial.write(0x01);
mySerial.write(ZERO);
}
 
void SendReadDataCmd()
{
MH=a/0x100;
ML=a%0x100;
mySerial.write(0x56);
mySerial.write(ZERO);
mySerial.write(0x32);
mySerial.write(0x0c);
mySerial.write(ZERO);
mySerial.write(0x0a);
mySerial.write(ZERO);
mySerial.write(ZERO);
mySerial.write(MH);
mySerial.write(ML);
mySerial.write(ZERO);
mySerial.write(ZERO);
mySerial.write(ZERO);
mySerial.write(0x20);
mySerial.write(ZERO);
mySerial.write(0x0a);
a+=0x20;
}
 
void StopTakePhotoCmd()
{
mySerial.write(0x56);
mySerial.write(ZERO);
mySerial.write(0x36);
mySerial.write(0x01);
mySerial.write(0x03);
}

I put following code to make the image size to 160*120

 if (sizeChange==0) {
    SetImageSizeCmd();
    Serial.println("Size Changed");
    sizeChange++;
  }

Only for the first time it works and gave me 8kb image within 30seconds. But it didn't work after that.
Can anyone tell me how to put SetImageSizeCmd(); to reduce the photo size or any correction to my code.

Thank you very much...

Only for the first time it works and gave me 8kb image within 30seconds. But it didn't work after that.

Maybe you need to make that call before taking each picture.

The 38400 is the default baudrate. You can change it to 115200.

Thank you very much...I will check and let know the results on baud rate and putting that before take picture.