在一个图片上写字并保存

在一个图片上写字然后在保存出来可以先将图片导入,然后利用setpen在图上写字然后导出图片

下面提供源代码


void Widget::SaveImage()
{
    QImage image = QPixmap(fileName).toImage();//绝对路径
    //以你原来的那张图片来
    //构造一个image

    QPainter painter(&image); //为这个QImage构造一个QPainter
    painter.setCompositionMode(QPainter::CompositionMode_SourceIn);
    //设置画刷的组合模式CompositionMode_SourceOut这个模式为目标图像在上。

    //改变画笔和字体
    QPen pen = painter.pen();
    pen.setColor(Qt::white);
    QFont font = painter.font();
    font.setBold(true);//加粗
    font.setPixelSize(18);//改变字体大小

    painter.setPen(pen);
    painter.setFont(font);
    painter.drawText(220,190,"XXXXXXXX");
    //将XXXX写在Image的220.190的位置

    image.save("C:/X1.bmp",0);
    //将画好的图片保存起来。
    //可以将png改为其他格式

}

此处有一个注意的问题:

对于图片的格式虽然没有严格要求,但是在使用BMP的时候,由于QImage里不支持RGB565的格式,会导致setPen没有效果,不能写字,所以必须先转换成任意一种Qt可以支持的格式,然后再写,弄完后,如果需要保留256色,可以选择再转回带调色盘的Format_Indexed8就可以了.所以修改的源代码如下


void Widget::SaveImage()
{
    QImage image = QPixmap(fileName).toImage();//绝对路径
    //以你原来的那张图片来
    //构造一个image
 
    QImage img = image.convertToFormat(QImage::Format_RGB888);     //先转成标准的RGB888或者别的可以支持的模式
    QPainter painter(&img); //为这个QImage构造一个QPainter
    painter.setCompositionMode(QPainter::CompositionMode_SourceIn);
    //设置画刷的组合模式CompositionMode_SourceOut这个模式为目标图像在上。
 
    //改变画笔和字体
    QPen pen = painter.pen();
    pen.setColor(Qt::white);
    QFont font = painter.font();
    font.setBold(true);//加粗
    font.setPixelSize(18);//改变字体大小
 
    painter.setPen(pen);
    painter.setFont(font);
    painter.drawText(220,190,"XXXXXXXX");
    //将Hello写在Image的中心
 
    QImage Foto = img.convertToFormat(QImage::Format_Indexed8);  //再用8位指标转化成Colormap
    Foto.save("C:/X1.bmp",0);
    //将画好的图片保存起来。
    //可以将png改为其他格式
 
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用Java的ImageIO类和Graphics2D类来编辑图片并添加水印文字,然后使用File类来保存到指定路径。以下是一个简单的示例代码: ```java import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; public class AddWatermark { public static void main(String[] args) { try { // 读取原始图片 BufferedImage originalImage = ImageIO.read(new File("original.jpg")); // 创建一个新的图片,大小和原始图片一样 BufferedImage newImage = new BufferedImage(originalImage.getWidth(), originalImage.getHeight(), BufferedImage.TYPE_INT_RGB); // 在新图片上绘制原始图片 Graphics2D graphics = newImage.createGraphics(); graphics.drawImage(originalImage, 0, 0, null); // 添加水印文字 Font font = new Font("Arial", Font.BOLD, 30); graphics.setFont(font); graphics.setColor(Color.WHITE); graphics.drawString("Watermark Text", 10, 50); // 保存图片 File output = new File("output.jpg"); ImageIO.write(newImage, "jpg", output); System.out.println("水印添加成功!"); } catch (IOException e) { System.out.println("水印添加失败!"); e.printStackTrace(); } } } ``` 在上面的示例代码中,我们首先使用ImageIO类读取原始图片,然后创建一个新的同样大小的图片,使用Graphics2D类在新图片上绘制原始图片,并添加水印文字。最后使用ImageIO类保存图片到指定路径。注意修改文件名和路径以适应你的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值