截圖圖片壓縮軟件是一款可以讀取剪貼板中的圖片,保存為png文件,調(diào)用pngquant來壓縮成新的png,把壓縮后的png文件的路徑寫入剪貼板(相當(dāng)于在資源管理器中對這個文件做“復(fù)制”操作)。還能將帶有復(fù)雜參數(shù)的淘寶鏈接簡化為只保留寶貝ID 的鏈接工具。東坡小編帶附上此軟件的源碼,有需要反歡迎下載!
怎么用
截圖圖片壓縮軟件使用方法
用各種截屏軟件截屏到剪貼板,運(yùn)行這個小程序,在需要粘貼的地方粘貼。
這個小程序是不后臺運(yùn)行的,運(yùn)行完就退出。運(yùn)行方法可以是用各種快捷運(yùn)行工具比如"WIN+R"、“ALTRUN”等,也可以創(chuàng)建exe的快捷方式,在屬性里添加全局快捷鍵。
這個小程序還有一個附加功能,就是運(yùn)行時也會從剪貼板讀取文本,如果是淘寶或天貓的URL就會簡化URL,去掉spm等參數(shù),只保留id參數(shù)。這是我整理購物清單時需要用的功能,因?yàn)橹挥袔仔写a,同時也需要做剪貼板操作,就和上面的程序合體了。
截圖圖片壓縮軟件程序源碼
#include "mainwindow.h"
#include <QApplication>
#include <QtGui>
#include <QMessageBox>
#include <QMimeData>
#include <QDebug>
#include <string.h>
#include <windows.h>
#include <shlobj.h>
//復(fù)制文件到剪貼板
//沒有加入錯誤判斷,請自行修改
int CopyFileToClipboard(const char szFileName[])
{
UINT uDropEffect;
HGLOBAL hGblEffect;
LPDWORD lpdDropEffect;
DROPFILES stDrop;
HGLOBAL hGblFiles;
LPSTR lpData;
uDropEffect = RegisterClipboardFormatA("Preferred DropEffect");
hGblEffect = GlobalAlloc(GMEM_ZEROINIT | GMEM_MOVEABLE | GMEM_DDESHARE,sizeof(DWORD));
lpdDropEffect = (LPDWORD)GlobalLock(hGblEffect);
*lpdDropEffect = DROPEFFECT_COPY;//復(fù)制; 剪貼則用DROPEFFECT_MOVE
GlobalUnlock(hGblEffect);
stDrop.pFiles = sizeof(DROPFILES);
stDrop.pt.x = 0;
stDrop.pt.y = 0;
stDrop.fNC = FALSE;
stDrop.fWide = FALSE;
hGblFiles = GlobalAlloc(GMEM_ZEROINIT | GMEM_MOVEABLE | GMEM_DDESHARE,\
sizeof(DROPFILES)+strlen(szFileName)+2);
lpData = (LPSTR)GlobalLock(hGblFiles);
memcpy(lpData,&stDrop,sizeof(DROPFILES));
strcpy(lpData+sizeof(DROPFILES),szFileName);
GlobalUnlock(hGblFiles);
OpenClipboard(NULL);
EmptyClipboard();
SetClipboardData(CF_HDROP,hGblFiles);
SetClipboardData(uDropEffect,hGblEffect);
CloseClipboard();
return 1;
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//MainWindow w;
//w.show();
//從剪貼板中讀取圖片并保存為png圖片
QImage myImage1=QImage(QApplication::clipboard()->image());
if(myImage1.isNull()) {
QString str = QApplication::clipboard()->text();
qDebug() << str;
if(str.left(7)=="http://"){
str = str.mid(7);
}
int istaobaourl=0;
if(str.left(25)=="item.taobao.com/item.htm?"){
str = str.mid(25);
qDebug()<<str;
QStringList slist = str.split('&');
for(int i=0;i<slist.size();i++){
qDebug() << slist[i];
if(slist[i].startsWith("id=")){
str="http://item.taobao.com/item.htm?"+slist[i];
qDebug() << str ;
QApplication::clipboard()->setText(str);
istaobaourl=1;
}
}
}
else if(str.left(26)=="detail.tmall.com/item.htm?"){
str = str.mid(26);
qDebug()<<str;
QStringList slist = str.split('&');
for(int i=0;i<slist.size();i++){
qDebug() << slist[i];
if(slist[i].startsWith("id=")){
str="http://detail.tmall.com/item.htm?"+slist[i];
qDebug() << str ;
QApplication::clipboard()->setText(str);
istaobaourl=1;
}
}
}
if(istaobaourl==1){
QMessageBox::information(NULL, "淘寶URL簡化成功",str);
return 0;
}
else{
QMessageBox::information(NULL, "出錯了","未能從剪貼板中讀取圖片或淘寶URL");
return -1;
}
}
myImage1.copy().save("temp.png");
//調(diào)用pngquant壓縮圖片
QProcess p(0);
p.start("pngquant.exe --force --verbose --ordered --speed=1 --quality=50-90 temp.png");
p.waitForStarted();
p.waitForFinished();
/*
//把壓縮后的圖片寫入剪貼板中
QImage myImage2("temp-or8.png");
QApplication::clipboard()->clear();
QApplication::clipboard()->setImage(myImage2);
myImage1=QImage(QApplication::clipboard()->image());
*/
//讀取原圖片大小
QFile file0("temp.png");
if (!file0.open(QIODevice::ReadOnly)){
QMessageBox::information(NULL, "出錯了","未能讀取原圖片");
return -2;
}
qint64 filesize0 = file0.size();
file0.close();
//讀取壓縮后圖片大小
QFile file1("temp-or8.png");
if (!file1.open(QIODevice::ReadOnly)) {
QMessageBox::information(NULL, "出錯了","未能讀取壓縮后的圖片");
return -3;
}
qint64 filesize1 = file1.size();
file1.close();
QDir temDir("temp-or8.png");
QString absDir = temDir.absolutePath();
qDebug()<<absDir;
std::string sstr = absDir.toStdString();
const char* ch = sstr.c_str();
CopyFileToClipboard(ch);
//根據(jù)原文件大小自動匹配單位
QString fs0,fs1,str;
if(filesize0<1024) {
fs0.sprintf("%d 字節(jié)",(int)filesize0);
fs1.sprintf("%d 字節(jié)",(int)filesize1);
}
else if(filesize0<1024*1024){
fs0.sprintf("%.1f KB",(float)filesize0/1024);
fs1.sprintf("%.1f KB",(float)filesize1/1024);
}
else{
fs0.sprintf("%.1f MB",(float)filesize0/1024/1024);
fs1.sprintf("%.1f MB",(float)filesize1/1024/1024);
}
//計(jì)算壓縮比,根據(jù)文件大小的方式或許有問題,尤其是對于很小的圖片會出現(xiàn)大于100%的壓縮比。
str.sprintf("%.1f%%",(float)filesize1*100/(float)filesize0);
str="截圖壓縮成功,原圖片大小為 "+fs0+",壓縮后圖片大小為 "+fs1+",壓縮率為 "+str+" ,壓縮后的圖片已經(jīng)寫入剪貼板中。";
QMessageBox::information(NULL, "截圖壓縮成功", str);
return 0;//a.exec();
}
- PC官方版
- 安卓官方手機(jī)版
- IOS官方手機(jī)版