有点想用他那个多模态了,现在上传图片还得保存到本地让模型自己读,麻烦得很,都10多天了,还没上,而且看价格表,5.1的参数量应该更大,上5v-turbo应该也能缓解一点算力紧张吧 1 个帖子 - 1 位参与者 阅读完整话题
<script setup> import { ref } from 'vue'; import { onLoad } from '@dcloudio/uni-app'; import request from '@/utils/request'; import { getFiles, getRandomFile, getFileArray } from '@/utils/yangUtils'; const imageSuffix = ['png', 'jpg', 'jpeg']; const videoSuffix = ['mp4', 'avi', 'mov']; const imageNum = ref(0); const videoNum = ref(0); // 获取父级传入的数据 const props = defineProps(["modelValue", "limit", "message", "isDelete", "isAdd"]); // 定义 emits const emit = defineEmits(['update:modelValue']); // const listData = ref(["https://yxdjpw.oss-cn-beijing.aliyuncs.com/uploadDefault/20260417192542-d3ea46.png", "https://yxdjpw.oss-cn-beijing.aliyuncs.com/uploadDefault/20260417194449-bfb1ba.mp4"]); const listData = ref([]) const onSelectFile = async () => { let result; // #ifdef APP || APP-PLUS || MP-WEIXIN || MP-TOUTIAO || MP-LARK || MP-JD || MP-HARMONY || MP-XHS result = await uni.chooseMedia({ count: props.limit || 9, mediaType: ['image', 'video'], sourceType: ['album', 'camera'], maxDuration: '30s' }) // #endif // #ifdef WEB || H5 result = await uni.chooseFile({ count: props.limit || 9, type: 'all', }) // #endif let arr = []; console.log(result); for (let filePath of result.tempFiles) { // 判断文件是否超出10M if (filePath.size > 10 * 1024 * 1024) { uni.showModal({ title: '提示', content: '文件大小不能超过10M!', showCancel: true, }) return; } if (imageSuffix.includes(filePath.name.replaceAll('"', '').split('.').pop()?.toLowerCase())) { imageNum.value++; } else if (videoSuffix.includes(filePath.name.replaceAll('"', '').split('.').pop()?.toLowerCase())) { // 判断之前有没有上传过视频或者图片 if (imageNum.value >= 1 || videoNum.value >= 1) { uni.showModal({ title: '提示', content: '图片和视频不能同时上传,并且视频只能上传一个!', showCancel: true, }) return; } videoNum.value++; } const data = await request("/upload/uploadFile", filePath.path, "post"); arr.push(getFileArray(data)[0]); } listData.value = listData.value.concat(arr); // 将数据返回出去 emit("update:modelValue", listData.value.join(",")); } // 删除 const onDelete = (index) => { // 1. 先拿到要删除的项(必须在 splice 之前拿!) const deletedItem = listData.value[index]; // 2. 判断类型,更新计数 const ext = deletedItem.split('.').pop()?.toLowerCase(); if (imageSuffix.includes(ext)) { imageNum.value--; } else if (videoSuffix.includes(ext)) { videoNum.value--; } // 3. 再删除元素 listData.value.splice(index, 1); // 4. 更新双向绑定 emit("update:modelValue", listData.value.join(",")); } // 查看 const onView = (item) => { } // 类型判断 const isSuffix = () => { return listData.value.some(item => { // 获取后缀(转小写,避免大小写问题) const ext = item.split('.').pop()?.toLowerCase() return videoSuffix.includes(ext) }) } </script> <template> <view> <view class="header"> <view v-if="props.message" class="message">{{ props.message }}</view> <view class="numCount">{{ `${listData.length}/${props.limit || 9}` }}</view> </view> <view class="image-grid" :class="isSuffix() ? 'grid-video' : ''"> <template v-for="(item, index) in listData" :key="index"> <view class="grid-item grid-item-content" :class="isSuffix() ? 'grid-item-video' : ''" @click="onView(item)"> <image v-if="imageSuffix.includes(item.split('.').pop())" class="img" :src="item" mode="aspectFill" /> <video v-else-if="videoSuffix.includes(item.split('.').pop())" class="video" :src="item" /> <view class="grid-item-delete" v-if="(isAdd ?? true)" @click="onDelete(index)"><uni-icons class="icon-delete" type="closeempty" color="#D3D4D6" size="24" /></view> </view> </template> <view class="grid-item icon-add" v-if="(isAdd ?? true) && !isSuffix() && listData.length < (props.limit ?? 9)" @click="onSelectFile()"> <uni-icons type="plusempty" size="60" color="#F1F1F1"></uni-icons> </view> </view> </view> </template> <style lang="scss" scoped> .header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20rpx; } .image-grid { display: grid; grid-template-columns: repeat(3, 1fr); /* 一行3个,自动均分 */ gap: 20rpx; /* 格子间距 */ box-sizing: border-box; } .grid-item { width: 240rpx; height: 240rpx; } .grid-video { grid-template-columns: repeat(1, 1fr) !important; } .grid-item-video { width: 100%; height: 400rpx; } .numCount { display: flex; flex-direction: row-reverse; font-size: 26rpx; } .img, .video { width: 100%; height: 100%; } .grid-item-content { position: relative; } .icon-add { background: #FFFFFF; line-height: 240rpx; text-align: center; border: 1rpx solid #EEEEEE; border-radius: 6rpx; } .grid-item-delete { position: absolute; top: 0rpx; right: 0rpx; z-index: 1; } </style> 方法解析 文件后端返回的是 /api/upload/xxx.png getFiles 将图片拼接成正常能访问的 比如 http://域名.com/api/upload/xxx.png getRandomFile 是随机访问 getFileArray 是拼接成数组 limit → 最多上传数量 默认为9 message → 提示 比如请上传视频 可不填 isDelete → 是否可以删除重新上传 默认为true isAdd → 是否可以新增,比如有些地方可以直接回显 比如产品的图片,但是你不想让它显示新增的框 可以为false 默认为true // 文件加载 export const getFiles = (url) => { if (!url) { return ""; } if (url.startsWith("http://") || url.startsWith("https://")) { return cleanString(url); } else { return baseURL + cleanString(url); } }; // 随机加载文件 export const getRandomFile = (url) => { if (!url) { return ""; } const urls = url.split(","); const randomIndex = Math.floor(Math.random() * urls.length); const selectedUrl = urls[randomIndex]; if ( cleanString(selectedUrl).startsWith("http://") || cleanString(selectedUrl).startsWith("https://") ) { return cleanString(selectedUrl); } else { return baseURL + cleanString(selectedUrl); } }; export const getFileArray = (url) => { if (!url) { return []; } let baseUrl = []; url.split(",").forEach((v) => { if ( cleanString(v).startsWith("http://") || cleanString(v).startsWith("https://") ) { baseUrl.push(cleanString(v)); } else { baseUrl.push(baseURL + cleanString(v)); } }); console.log(baseUrl); return baseUrl; }; 请求就是 uni.request的请求 你们按照你们自己的改 当前只支持H5 你们需要的话 我会再更新 如果上传了视频就直接独占一行 并且不能上传其他视频和图片 仿照的是朋友圈 其他页面调用就是 比如文件名叫uploadFile.vue吧 import UpLoadFile from '@/components/uploadFile.vue' // 页面代码 <UpLoadFile v-model="form.media" /> 第一次封装 还有些问题 我会持续更新的 1 个帖子 - 1 位参与者 阅读完整话题
直接说要生成的图片就有了,甚至2选一,询问用户那个更好,我甚至以为这个是竞技场了 。奇怪的是,为什么女主播名字都带鹿鹿的??? 10 个帖子 - 5 位参与者 阅读完整话题
GPT-IMAGE-2 生成海报以假乱真 搞七捻三 今天看到很多人在讨论GPT-IMAGE-2,自己去生成了几张海报试了下,效果是真不错啊,提示词很简单,就是:例如“生成跑跑卡丁车,qq 飞车这两款游戏联动活动宣传海报”这样的,以下来欣赏一下效果图: [7b41f8dca6c867884de42b617f2f4c9f] [61dd66732b673860edd9cd34bda48c71] [4f2f2f0ccf6905230792f1b63… 从这个贴的评论里发现还有不少佬有没有被灰度到,可以 直接回复提示词 ,我帮你生成。 附昨天让 gpt 生成的感觉效果最惊艳一张 99 个帖子 - 50 位参与者 阅读完整话题
GPT灰度的新生成图片的模型在哪个平台可以用? 继此贴 贴下各类佬友的方法 我测试了一下发现并非切换到pro就可以进入灰度,而是切换各个模型都有可能进入灰度 上图为thinking模式 上图为instant模式 (时间上紧接着thinking模型之后,另开新窗口重新生成) 因此推测: 切换模式 确实可以进入到灰度 8 个帖子 - 7 位参与者 阅读完整话题
只能说是有点才能在身上的 3 个帖子 - 3 位参与者 阅读完整话题
佬们今天使用ClaudeCode出现图片所示情况,之前没有遇到过。有没有佬知道这种问题该如何解决 2 个帖子 - 2 位参与者 阅读完整话题
比以前版本好多了,有点东西… 1 个帖子 - 1 位参与者 阅读完整话题
m.sohu.com 人类首张太空AI生成图问世!清华系企业携手开启“天地同算”新纪元 人类计算史迎来里程碑时刻——一颗运行在数百公里高空的卫星,成功生成了首张AI图像。共绩科技则构建了全球首个闲时算力调度网络。更值得关注的是"算力外包"模式——当地面数据中心超载时,任务可自动分流至太空星座,形… 遥遥领先于马斯克() 1 个帖子 - 1 位参与者 阅读完整话题
第一次用chatgpt生图,感觉还不错呢。 画一张 NBA球员,追梦格林 穿着警服 逮捕 伦纳德 的图片。 6 个帖子 - 5 位参与者 阅读完整话题
1 个帖子 - 1 位参与者 阅读完整话题
可是我看了很多人发的图片,帖子。opus4.7是真的很逆天啊 1 个帖子 - 1 位参与者 阅读完整话题
最近有些生图任务,使用大香蕉效果并不好,想试试gpt新模型,但是我自己的pro账号没有灰度到,想问问还有什么其他方法可以用到? 14 个帖子 - 7 位参与者 阅读完整话题
感觉 oai 新的图片生成模型对于字体细节的处理非常到位了,这和在抖音直播里截图不细看没两样了 3 个帖子 - 2 位参与者 阅读完整话题
3 个帖子 - 3 位参与者 阅读完整话题
近期又开始捣鼓一下自己的龙虾,心情烦躁时会和它聊聊天。突然想让它给我发一些搞怪的图片,却一直没成功。最后测试让他展示一下工作空间中的图片,也不行。求助!!! 1 个帖子 - 1 位参与者 阅读完整话题
此图片由伟大的gpt生成 3 个帖子 - 2 位参与者 阅读完整话题
这也太离谱了; 大哥 SC 都能生成出来, 而且人物面向不一样, 亲亲位置还不同; 完全理解了啊; GPT 很听话, 理解能力强, 也作用于图片模型上, 这也太厉害了 4 个帖子 - 4 位参与者 阅读完整话题
有人用过Elsevier模板吗,为什么里面的图片和表格这么难调啊 1 个帖子 - 1 位参与者 阅读完整话题
转载:疑似 ChatGPT 更新图片模型 中文生成能力有大提升 我没订阅 2 个帖子 - 2 位参与者 阅读完整话题