var btn = new Button("选择文件夹"); btn.onClick = function() { var folder = Folder.selectDialog("选择文件夹"); if (folder) { var fileList = folder.getFiles(); var list = []; for (var i = 0; i < fileList.length; i++) { if (fileList[i] instanceof File) { list.push(fileList[i]); } } var dlg = new Window("dialog", "文件列表"); dlg.orientation = "column"; var lst = dlg.add("listbox", undefined, list); var btnOK = dlg.add("button", undefined, "确定"); btnOK.onClick = function() { var selectedItem = lst.selection; if (selectedItem) { var file = selectedItem.text; // 在这里编写将文件导入ae的脚本 alert(file + "导入成功!"); } else { alert("请选择一个文件!"); } dlg.close(); } dlg.show(); } }
时间: 2024-04-07 11:29:13 浏览: 106
这是一段 JavaScript 代码,用于实现一个 Adobe After Effects 脚本界面,用于选择一个文件夹,并将该文件夹下的所有文件展示在一个列表框中。用户可以选择列表框中的任意一个文件,并执行将该文件导入 After Effects 的操作。如果用户没有选择任何文件,则会提示用户选择文件。你有什么关于这段代码的问题吗?
相关问题
from tkinter import * import cv2 import numpy as np from PIL import ImageGrab from tensorflow.keras.models import load_model from temp import * model = load_model('mnist.h5') image_folder = "img/" root = Tk() root.resizable(0, 0) root.title("HDR") lastx, lasty = None, None image_number = 0 cv = Canvas(root, width=1200, height=480, bg='white') cv.grid(row=0, column=0, pady=2, sticky=W, columnspan=2) def clear_widget(): global cv cv.delete('all') def draw_lines(event): global lastx, lasty x, y = event.x, event.y cv.create_line((lastx, lasty, x, y), width=8, fill='black', capstyle=ROUND, smooth=True, splinesteps=12) lastx, lasty = x, y def activate_event(event): global lastx, lasty cv.bind('<B1-Motion>', draw_lines) lastx, lasty = event.x, event.y cv.bind('<Button-1>', activate_event) def Recognize_Digit(): global image_number filename = f'img_{image_number}.png' root.update() widget = cv x = root.winfo_rootx() + widget.winfo_rootx() y = root.winfo_rooty() + widget.winfo_rooty() x1 = x + widget.winfo_width() y1 = y + widget.winfo_height() print(x, y, x1, y1) # get image and save ImageGrab.grab().crop((x, y, x1, y1)).save(image_folder + filename) image = cv2.imread(image_folder + filename, cv2.IMREAD_COLOR) gray = cv2.cvtColor(image.copy(), cv2.COLOR_BGR2GRAY) ret, th = cv2.threshold( gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU) # contours = cv2.findContours( # th, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0] Position = findContours(th) for m in range(len(Position)): # make a rectangle box around each curve cv2.rectangle(th, (Position[m][0], Position[m][1]), ( Position[m][2], Position[m][3]), (255, 0, 0), 1) # Cropping out the digit from the image corresponding to the current contours in the for loop digit = th[Position[m][1]:Position[m] [3], Position[m][0]:Position[m][2]] # Resizing that digit to (18, 18) resized_digit = cv2.resize(digit, (18, 18)) # Padding the digit with 5 pixels of black color (zeros) in each side to finally produce the image of (28, 28) padded_digit = np.pad(resized_digit, ((5, 5), (5, 5)), "constant", constant_values=0) digit = padded_digit.reshape(1, 28, 28, 1) digit = digit / 255.0 pred = model.predict([digit])[0] final_pred = np.argmax(pred) data = str(final_pred) + ' ' + str(int(max(pred) * 100)) + '%' print(data) font = cv2.FONT_HERSHEY_SIMPLEX fontScale = 0.5 color = (255, 0, 0) thickness = 1 cv2.putText(th, data, (Position[m][0], Position[m][1] - 5), font, fontScale, color, thickness) cv2.imshow('image', th) cv2.waitKey(0) cv2.destroyAllWindows() btn_save = Button(text='Recognize Digit', command=Recognize_Digit) btn_save.grid(row=2, column=0, pady=1, padx=1) button_clear = Button(text='Clear Widget', command=clear_widget) button_clear.grid(row=2, column=1, pady=1, padx=1) root.mainloop()
这段代码是一个Python程序,用于画图并识别手写数字。它调用了许多库,如tkinter、cv2、numpy、PIL和tensorflow。程序创建了一个图形用户界面,包括一个白色的画布和一个按钮。用户在画布上绘制数字后,可以点击按钮来触发识别数字的功能。程序会将绘制的数字保存为图片文件,并加载训练好的模型(mnist.h5)来识别数字。程序最后打印出保存的图片文件的坐标信息。
// 单图片上传 var uploadInst = upload.render({ elem: '#ID-upload-demo-btn', url: 'https://httpbin.org/post', // 此处用的是第三方的 http 请求演示,实际使用时改成您自己的上传接口即可。 before: function(obj){ // 预读本地文件示例,不支持ie8 obj.preview(function(index, file, result){ $('#ID-upload-demo-img').attr('src', result); // 图片链接(base64) }); element.progress('filter-demo', '0%'); // 进度条复位 layer.msg('上传中', {icon: 16, time: 0}); }, done: function(res){ // 若上传失败 if(res.code > 0){ return layer.msg('上传失败'); } // 上传成功的一些操作 // … $('#ID-upload-demo-text').html(''); // 置空上传失败的状态 }, error: function(){ // 演示失败状态,并实现重传 var demoText = $('#ID-upload-demo-text'); demoText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>'); demoText.find('.demo-reload').on('click', function(){ uploadInst.upload(); }); }, // 进度条 progress: function(n, elem, e){ element.progress('filter-demo', n + '%'); // 可配合 layui 进度条元素使用 if(n == 100){ layer.msg('上传完毕', {icon: 1}); } } }); 如果用flask定义上传接口将图片保存到本地文件夹要怎么写
如果你想在 Flask 中定义上传接口并将图片保存到本地文件夹,你可以按照以下步骤进行:
1. 在项目文件夹中创建一个名为 `app.py` 的 Python 文件,并在其中导入 Flask 模块。
```python
from flask import Flask, request, jsonify
```
2. 实例化 Flask 应用程序,并创建一个路由以处理上传请求。对于每个请求,应用程序将检查上传的文件是否为图片,如果是则将其保存到本地文件夹,并返回上传成功的响应。
```python
app = Flask(__name__)
@app.route('/upload', methods=['POST'])
def upload():
file = request.files['file']
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
return jsonify({'message': 'Upload success!'})
else:
return jsonify({'message': 'Invalid file type.'})
def allowed_file(filename):
return '.' in filename and filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS
```
3. 在应用程序中设置允许上传的文件类型和保存文件的路径。
```python
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'}
UPLOAD_FOLDER = '/path/to/uploads' # 修改为你想要保存文件的路径
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
```
以上是一个简单的示例,你可以根据自己的实际需求进行修改和扩展。需要注意的是,在实际应用中,你需要对上传的文件进行更加严格的检查和处理,以防止安全问题的发生。
阅读全文