图像处理
图片加载
图片加载
#define PixMaxSize 4000*3000*2//10000*10000//4000*3000
/**
* @brief 设置图片
* @param image: 要展示图片的地址
*/
void setImage(const QString & image){
{
QImageReader imgReader;
imgReader.setFileName(image);
if (!imgReader.canRead())
{
}
else{
m_imageAttributes.width = imgReader.size().width();
m_imageAttributes.height = imgReader.size().height();
double sizeSum = imgReader.size().width()*imgReader.size().height();
// int maxSum = PixMaxSize*sin(45.0)*sin(45.0);
int maxSum = PixMaxSize/2;
if(sizeSum > maxSum){
// 要求比例
double requireProportion = qSqrt(maxSum*1.00/sizeSum);
int width = imgReader.size().width()*requireProportion;
int height = imgReader.size().height()*requireProportion;
// 缩略图按比例缩放
imgReader.setScaledSize(QSize(width,height));
}
// 读取图片
QImage img = imgReader.read();
// 需要转格式,不然QPainter无法绘制
if (img.format() == QImage::Format_Indexed8) {
img = img.convertToFormat(QImage::Format_ARGB32);
}
if(!img.isNull())
{
m_image = img;
m_originalImage = img;
m_widget->setImage(img);
}
}
}
图片按比例加载
///
/// \brief picScale 图片等比例缩放
/// \param pix 图片
/// \param path 路径
/// \param requiredImageSize 尺寸
/// \param supportIcon 图片找不到,是否支持显示图标
///
static void picScale(QPixmap &pix, QString path, QSize requiredImageSize, bool supportIcon = true)
{
// QImage/QPixmap 的大小限制为32767x32767 像素
QImageReader imgReader;
imgReader.setFileName(path);
if (!imgReader.canRead())
{
}
int nThumbnailWidth = requiredImageSize.width();
int nThumbnailHeight = requiredImageSize.height();
// 图片实际尺寸
QSize sizeImage = imgReader.size();
// 缩放后比例
QSize sizeImageEnd = sizeImage;
// 要求比例
double requireProportion = requiredImageSize.width()*1.00/requiredImageSize.height();
// 实际比例
double actualProportion = sizeImage.width()*1.00/sizeImage.height();
if(requireProportion < actualProportion){
sizeImageEnd.setWidth(requiredImageSize.width());
sizeImageEnd.setHeight(requiredImageSize.width()/actualProportion);
}
else{
sizeImageEnd.setWidth(requiredImageSize.height()*actualProportion);
sizeImageEnd.setHeight(requiredImageSize.height());
}
// 缩略图按比例缩放
imgReader.setScaledSize(sizeImageEnd);
// 读取图片
pix = QPixmap::fromImage(imgReader.read());
if(!pix.isNull()){
}
else {
if(supportIcon){
// 获取系统图标
QFileIconProvider provider;
QIcon icon = provider.icon(path);
pix = icon.pixmap(QSize(nThumbnailWidth,nThumbnailHeight));
}
pix = pix.scaled(sizeImageEnd, Qt::KeepAspectRatio, Qt::SmoothTransformation);
}
}
图片转Base64
///
/// \brief pixtoBase64 图片转base64
/// \param pix
/// \return
///
QByteArray pixtoBase64(QPixmap pix, QString type = "png")
{
QByteArray bytearray;
QBuffer buffer(&bytearray);
buffer.open(QIODevice::WriteOnly);
pix.save(&buffer,type.toUtf8().data());
QByteArray img64 = bytearray.toBase64();//base64编码
return img64;
}
Base64转图片
///
/// \brief base64toPix base64转图片
/// \param base64
/// \return
///
QByteArray CommonFunc::imagetoBas