33import com .qcloud .cos .COSClient ;
44import com .qcloud .cos .exception .CosClientException ;
55import com .qcloud .cos .exception .CosServiceException ;
6+ import com .qcloud .cos .model .*;
67import com .qcloud .cos .model .ciModel .common .ImageProcessRequest ;
7- import com .qcloud .cos .model .CompleteMultipartUploadRequest ;
8- import com .qcloud .cos .model .CompleteMultipartUploadResult ;
9- import com .qcloud .cos .model .InitiateMultipartUploadRequest ;
10- import com .qcloud .cos .model .InitiateMultipartUploadResult ;
11- import com .qcloud .cos .model .PartETag ;
12- import com .qcloud .cos .model .PutObjectRequest ;
13- import com .qcloud .cos .model .PutObjectResult ;
14- import com .qcloud .cos .model .UploadPartRequest ;
15- import com .qcloud .cos .model .UploadPartResult ;
16- import com .qcloud .cos .model .UploadResult ;
178import com .qcloud .cos .model .ciModel .persistence .CIObject ;
189import com .qcloud .cos .model .ciModel .persistence .CIUploadResult ;
1910import com .qcloud .cos .model .ciModel .persistence .PicOperations ;
2718import java .util .List ;
2819
2920/**
30- * 盲水印相关demo API 接口说明:https://cloud.tencent.com/document/product/460/19017
21+ * 盲水印相关demo API 接口说明:https://cloud.tencent.com/document/product/436/46782
3122 */
3223public class BlindWatermarkDemo {
24+ /**
25+ * 上传时添加盲水印
26+ */
3327 public static void addBlindWatermark (COSClient cosClient ) {
34- // bucket名需包含appid
35- // api 请参考:https://cloud.tencent.com/document/product/436/46782
36- String bucketName = "examplebucket-1250000000" ;
37-
38- String key = "qrcode.png" ;
39- File localFile = new File ("E://qrcode.png" );
28+ String bucketName = "demo-123456789" ;
29+ String key = "qrcode.jpg" ;
30+ File localFile = new File ("demo.jpg" );
4031 PutObjectRequest putObjectRequest = new PutObjectRequest (bucketName , key , localFile );
4132 PicOperations picOperations = new PicOperations ();
4233 picOperations .setIsPicInfo (1 );
4334 List <PicOperations .Rule > ruleList = new LinkedList <>();
4435 PicOperations .Rule rule = new PicOperations .Rule ();
4536 rule .setBucket (bucketName );
46- rule .setFileId ("qrcode-watermark.png " );
37+ rule .setFileId ("BlindWatermark.jpg " );
4738 // 使用盲水印功能,水印图的宽高不得超过原图的1/8
48- rule .setRule ("watermark/3/type/2/image/aHR0cDovL2V4YW1wbGVidWNrZXQtMTI1MDAwMDAwMC5jb3MuYXAtZ3Vhbmd6aG91Lm15cWNsb3VkLmNvbS9zaHVpeWluLnBuZw== " );
39+ rule .setRule ("watermark/3/type/3/text/bWFyayB0ZXN0/version/3.0 " );
4940
5041 ruleList .add (rule );
5142 picOperations .setRules (ruleList );
@@ -65,100 +56,23 @@ public static void addBlindWatermark(COSClient cosClient) {
6556 }
6657 }
6758
68- public static void addBlindWatermarkWithTransferManager (TransferManager transferManager ) throws InterruptedException {
69- // bucket名需包含appid
70- // api 请参考:https://cloud.tencent.com/document/product/436/46782
71- String bucketName = "examplebucket-1250000000" ;
72- String key = "qrcode.png" ;
73- File localFile = new File ("E://qrcode.png" );
74- PutObjectRequest putObjectRequest = new PutObjectRequest (bucketName , key , localFile );
75- PicOperations picOperations = new PicOperations ();
76- picOperations .setIsPicInfo (1 );
77- List <PicOperations .Rule > ruleList = new LinkedList <>();
78- PicOperations .Rule rule1 = new PicOperations .Rule ();
79- rule1 .setBucket (bucketName );
80- rule1 .setFileId ("qrcode-watermark.png" );
81- rule1 .setRule ("watermark/3/type/3/text/dGVuY2VudCBjbG91ZA==" );
82- ruleList .add (rule1 );
83- picOperations .setRules (ruleList );
84- putObjectRequest .setPicOperations (picOperations );
85-
86- Upload upload = transferManager .upload (putObjectRequest );
87- UploadResult uploadResult = upload .waitForUploadResult ();
88- CIUploadResult ciUploadResult = uploadResult .getCiUploadResult ();
89- System .out .println (uploadResult .getRequestId ());
90- System .out .println (ciUploadResult .getOriginalInfo ().getEtag ());
91- for (CIObject ciObject :ciUploadResult .getProcessResults ().getObjectList ()) {
92- System .out .println (ciObject .getLocation ());
93- }
94- }
95-
96- public static void addBlindWatermarkWithMultipart (COSClient cosClient ) throws FileNotFoundException {
97- // bucket名需包含appid
98- // api 请参考:https://cloud.tencent.com/document/product/436/46782
99- String bucketName = "examplebucket-1250000000" ;
100-
101- String key = "qrcode.png" ;
102- File localFile = new File ("E://qrcode.png" );
103- InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest (bucketName , key );
104- InitiateMultipartUploadResult initResult = cosClient .initiateMultipartUpload (request );
105- String uploadId = initResult .getUploadId ();
106-
107- // 上传分块
108- List <PartETag > partETags = new LinkedList <>();
109- UploadPartRequest uploadPartRequest = new UploadPartRequest ();
110- uploadPartRequest .setBucketName (bucketName );
111- uploadPartRequest .setKey (key );
112- uploadPartRequest .setUploadId (uploadId );
113- // 设置分块的数据来源输入流
114- uploadPartRequest .setInputStream (new FileInputStream (localFile ));
115- // 设置分块的长度
116- uploadPartRequest .setPartSize (localFile .length ()); // 设置数据长度
117- uploadPartRequest .setPartNumber (1 ); // 假设要上传的part编号是10
118- UploadPartResult uploadPartResult = cosClient .uploadPart (uploadPartRequest );
119- PartETag partETag = uploadPartResult .getPartETag ();
120- partETags .add (partETag );
121-
122- // 合并分块并带上图像处理参数
123- CompleteMultipartUploadRequest completeMultipartUploadRequest =
124- new CompleteMultipartUploadRequest (bucketName , key , uploadId , partETags );
125- PicOperations picOperations = new PicOperations ();
126- picOperations .setIsPicInfo (1 );
127- List <PicOperations .Rule > ruleList = new LinkedList <>();
128- PicOperations .Rule rule1 = new PicOperations .Rule ();
129- rule1 .setBucket (bucketName );
130- rule1 .setFileId ("qrcode-watermark.png" );
131- rule1 .setRule ("watermark/3/type/3/text/dGVuY2VudCBjbG91ZA==" );
132- ruleList .add (rule1 );
133- picOperations .setRules (ruleList );
134- completeMultipartUploadRequest .setPicOperations (picOperations );
135-
136- CompleteMultipartUploadResult completeMultipartUploadResult =
137- cosClient .completeMultipartUpload (completeMultipartUploadRequest );
138-
139- CIUploadResult ciUploadResult = completeMultipartUploadResult .getCiUploadResult ();
140- System .out .println (completeMultipartUploadResult .getRequestId ());
141- System .out .println (ciUploadResult .getOriginalInfo ().getEtag ());
142- for (CIObject ciObject :ciUploadResult .getProcessResults ().getObjectList ()) {
143- System .out .println (ciObject .getLocation ());
144- }
145- }
146-
147- public static void extractBlindWatermark (COSClient cosClient ) {
148- // bucket名需包含appid
149- // api 请参考:https://cloud.tencent.com/document/product/436/46782
150- String bucketName = "examplebucket-1250000000" ;
151-
152- String key = "qrcode-watermark.png" ;
153- File localFile = new File ("E://qrcode-watermark.png" );
59+ /**
60+ * 上传时获取盲水印
61+ */
62+ public static void getBlindWatermark (COSClient cosClient ) {
63+ String bucketName = "demo-123456789" ;
64+ String key = "qrcode.jpg" ;
65+ File localFile = new File ("BlindWatermark.jpg" );
15466 PutObjectRequest putObjectRequest = new PutObjectRequest (bucketName , key , localFile );
15567 PicOperations picOperations = new PicOperations ();
15668 picOperations .setIsPicInfo (1 );
15769 List <PicOperations .Rule > ruleList = new LinkedList <>();
15870 PicOperations .Rule rule = new PicOperations .Rule ();
15971 rule .setBucket (bucketName );
160- rule .setFileId ("qrcode-watermark-extract.png" );
161- rule .setRule ("watermark/4/type/2/image/aHR0cDovL2V4YW1wbGVidWNrZXQtMTI1MDAwMDAwMC5jb3MuYXAtZ3Vhbmd6aG91Lm15cWNsb3VkLmNvbS9zaHVpeWluLnBuZw==" );
72+ rule .setFileId ("BlindWatermark-test.jpg" );
73+ // 使用盲水印功能,水印图的宽高不得超过原图的1/8
74+ rule .setRule ("watermark/4/type/3/version/3.0" );
75+
16276 ruleList .add (rule );
16377 picOperations .setRules (ruleList );
16478 putObjectRequest .setPicOperations (picOperations );
@@ -169,7 +83,6 @@ public static void extractBlindWatermark(COSClient cosClient) {
16983 System .out .println (ciUploadResult .getOriginalInfo ().getEtag ());
17084 for (CIObject ciObject :ciUploadResult .getProcessResults ().getObjectList ()) {
17185 System .out .println (ciObject .getLocation ());
172- System .out .println (ciObject .getWatermarkStatus ());
17386 }
17487 } catch (CosServiceException e ) {
17588 e .printStackTrace ();
@@ -192,7 +105,7 @@ public static void addBlindWatermarkToExistImage(COSClient cosClient) {
192105 rule .setBucket (bucketName );
193106 rule .setFileId ("/image/result/dog.jpg" );
194107 // 使用盲水印功能,水印图的宽高不得超过原图的1/8
195- rule .setRule ("watermark/3/type/2/image/aHR0cDovL2V4YW1wbGVidWNrZXQtMTI1MDAwMDAwMC5jb3MuYXAtZ3Vhbmd6aG91Lm15cWNsb3VkLmNvbS9zaHVpeWluLnBuZw== " );
108+ rule .setRule ("watermark/3/type/2/image/aHR0cHM6Ly9tYXJranJ6aGFuZy0xMjUxNzA0NzA4LmNvcy5hcC1jaG9uZ3FpbmcubXlxY2xvdWQuY29tL3NodWl5aW4uanBn " );
196109
197110 ruleList .add (rule );
198111 picOperations .setRules (ruleList );
@@ -210,6 +123,9 @@ public static void addBlindWatermarkToExistImage(COSClient cosClient) {
210123 }
211124 }
212125
126+ /**
127+ * 云上数据处理
128+ */
213129 public static void extractBlindWatermarkFromExistImage (COSClient cosClient ) {
214130 // bucket名需包含appid
215131 // api 请参考:https://cloud.tencent.com/document/product/436/46782
@@ -224,7 +140,7 @@ public static void extractBlindWatermarkFromExistImage(COSClient cosClient) {
224140 rule .setBucket (bucketName );
225141 rule .setFileId ("/image/result/extract-shuiyin.jpg" );
226142 // 抽取盲水印
227- rule .setRule ("watermark/4/type/2 /image/aHR0cDovL2V4YW1wbGVidWNrZXQtMTI1MDAwMDAwMC5jb3MuYXAtZ3Vhbmd6aG91Lm15cWNsb3VkLmNvbS9zaHVpeWluLnBuZw==" );
143+ rule .setRule ("watermark/4/type/3 /image/aHR0cDovL2V4YW1wbGVidWNrZXQtMTI1MDAwMDAwMC5jb3MuYXAtZ3Vhbmd6aG91Lm15cWNsb3VkLmNvbS9zaHVpeWluLnBuZw==" );
228144
229145 ruleList .add (rule );
230146 picOperations .setRules (ruleList );
@@ -244,10 +160,7 @@ public static void extractBlindWatermarkFromExistImage(COSClient cosClient) {
244160
245161 public static void main (String [] args ) throws Exception {
246162 COSClient cosClient = ClientUtils .getTestClient ();
247- // addBlindWatermark(cosClient);
248- // extractBlindWatermark(cosClient);
249- addBlindWatermarkToExistImage (cosClient );
250- extractBlindWatermarkFromExistImage (cosClient );
163+ getBlindWatermark (cosClient );
251164 cosClient .shutdown ();
252165 }
253166}
0 commit comments