图像透明处理

This commit is contained in:
spllzh
2025-10-16 23:21:39 +08:00
parent abd370beb5
commit cfcd04fe7e
33 changed files with 4658 additions and 23 deletions

View File

@@ -0,0 +1,153 @@
package com.rj.service;
import com.rj.dto.VideoSynthesisRequestDto;
import com.rj.entity.VideoSynthesisLog;
import com.rj.service.IVideoSynthesisService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import static org.junit.jupiter.api.Assertions.*;
/**
* 视频合成临时URL功能测试类
*
* @author rj
* @date 2025-01-30
*/
@SpringBootTest
@ActiveProfiles("test")
public class VideoSynthesisTempUrlTest {
@Autowired
private IVideoSynthesisService videoSynthesisService;
/**
* 测试临时URL生成
*/
@Test
public void testTempUrlGeneration() {
VideoSynthesisRequestDto request = new VideoSynthesisRequestDto();
request.setVideoName("测试视频");
request.setImageUrl("http://test.com/image.jpg");
request.setAudioUrl("http://test.com/audio.mp3");
request.setModel("liveportrait");
VideoSynthesisLog result = videoSynthesisService.synthesizeVideoAndSave(request);
assertNotNull(result);
assertNotNull(result.getVideoTempUrl());
assertTrue(result.getVideoTempUrl().contains("video/temp/"));
assertTrue(result.getVideoTempUrl().contains("name="));
System.out.println("临时URL生成测试通过: " + result.getVideoTempUrl());
}
/**
* 测试临时URL格式
*/
@Test
public void testTempUrlFormat() {
VideoSynthesisRequestDto request = new VideoSynthesisRequestDto();
request.setVideoName("我的产品视频");
request.setImageUrl("http://test.com/image.jpg");
request.setAudioUrl("http://test.com/audio.mp3");
request.setModel("liveportrait");
VideoSynthesisLog result = videoSynthesisService.synthesizeVideoAndSave(request);
assertNotNull(result);
String tempUrl = result.getVideoTempUrl();
// 验证URL格式
assertTrue(tempUrl.startsWith("https://"));
assertTrue(tempUrl.contains("/video/temp/"));
assertTrue(tempUrl.contains("?name="));
// 验证请求ID在URL中
assertTrue(tempUrl.contains(result.getRequestId()));
// 验证视频名称被编码
assertTrue(tempUrl.contains("name="));
System.out.println("临时URL格式测试通过: " + tempUrl);
}
/**
* 测试中文视频名称的URL编码
*/
@Test
public void testChineseVideoNameEncoding() {
VideoSynthesisRequestDto request = new VideoSynthesisRequestDto();
request.setVideoName("我的中文视频名称");
request.setImageUrl("http://test.com/image.jpg");
request.setAudioUrl("http://test.com/audio.mp3");
request.setModel("liveportrait");
VideoSynthesisLog result = videoSynthesisService.synthesizeVideoAndSave(request);
assertNotNull(result);
String tempUrl = result.getVideoTempUrl();
// 验证中文名称被正确编码
assertTrue(tempUrl.contains("name="));
assertFalse(tempUrl.contains("我的中文视频名称")); // 应该被编码
assertTrue(tempUrl.contains("%")); // 应该包含编码字符
System.out.println("中文视频名称编码测试通过: " + tempUrl);
}
/**
* 测试特殊字符视频名称的URL编码
*/
@Test
public void testSpecialCharacterVideoNameEncoding() {
VideoSynthesisRequestDto request = new VideoSynthesisRequestDto();
request.setVideoName("Video with Spaces & Special Characters!@#$%");
request.setImageUrl("http://test.com/image.jpg");
request.setAudioUrl("http://test.com/audio.mp3");
request.setModel("liveportrait");
VideoSynthesisLog result = videoSynthesisService.synthesizeVideoAndSave(request);
assertNotNull(result);
String tempUrl = result.getVideoTempUrl();
// 验证特殊字符被正确编码
assertTrue(tempUrl.contains("name="));
assertFalse(tempUrl.contains(" ")); // 空格应该被编码
assertFalse(tempUrl.contains("&")); // &符号应该被编码
assertFalse(tempUrl.contains("!")); // 感叹号应该被编码
System.out.println("特殊字符视频名称编码测试通过: " + tempUrl);
}
}