microsoft / pxt

Microsoft MakeCode (PXT - Programming eXperience Toolkit)
https://makecode.com
MIT License
2.07k stars 577 forks source link

Pre PR discussion - adding image import support to the asset editor #9892

Open talkol opened 6 months ago

talkol commented 6 months ago

I opened this issue originally in pxt-arcade repo but after analyzing the codebase it looks like the PR needs to be in this repo


I want to work on a PR for this feature. Before I start working on it, I want to verify with the team that the feature is welcome.

Is your feature request related to a problem? Please describe. Importing an external image file to the editor is currently cumbersome. The best current alternative is https://github.com/riknoll/pxt-arcade-asset-tool which is great but a bit complicated for children to use.

Describe the solution you'd like I want the image editor in Make Code arcade to have easy support for importing images from local files.

Describe alternatives you've considered The alternative I considered appears in https://arcade.makecode.com/developer/images under the section "Importing custom art and palettes". As a tech savvy person I could make it work, but children I helped struggled with this method.

Additional context The feature I want to add will be under the image editor (Create New Asset - Image). The current pixel image editor has two top tabs - "Editor" and "Gallery". I want to add a third option named "Import". If someone clicks on "Import", they would see a dialog that allows them to upload/drag a local image file (JPG, PNG, etc). They would be able to select a new image size post import - since most external images are too big for Make Code's resolution. The aspect ratio would be taken from the uploaded image and maintained, so if the user changes with to "160px" (Make Code screen width), the height would be adjusted automatically.

Once the user confirms the import, the image would be resized and the number of colors reduced to match the default Make Code palette. The user would be returned to the "Editor" tab, with the resized image pixels visible on screen. The flow is very similar to choosing an image from the "Gallery" tab.

@riknoll - as a member of the team and the creator of pxt-arcade-asset-tool, I will appreciate your feedback before I start working on this feature.

Jaqster commented 6 months ago

Hi @talkol - I will chime in here. One of the main reasons we didn't want to go down this path is for child safety. Currently, we only scan content when a project is shared - and even then we don't scan images. When we open the gates for 3rd party media uploads, we need to be very careful to put in place content scanning and review filters. It's a big chunk of work. Also, slightly less of a reason, but something we've talked about, is that we want to encourage children to be creative in MakeCode and author their own art/music/etc. Happy to have a further discussion on this topic, but wanted to give you the background context and our reasoning behind not offering this capability.

juliekol commented 6 months ago

I understand the concern about child safety, but if somebody wanted to doodle an obscene picture, they still can. Moreover, the image importer https://github.com/riknoll/pxt-arcade-asset-tool allows adding custom images to games as well, so anyone set on creating abusive content would find a way.

Sharing a game has the "report inappropriate" functionality which helps mitigate these issues.

I still think preventing image upload is not the way to go. It's like preventing Google Slides or Powerpoint from uploading images for the fear that children may upload an abusive image for a presentation they make for school. Censorship is not the answer.

Almost all game makers, https://scratch.mit.edu included, have this functionality built in. This creates a glass ceiling pushing young developers away from MakeCode when they want to incorporate a bit nicer graphics.

snowyu commented 1 month ago

And it is also difficult to reuse image resources from other makecode projects.

What you should learn here is programming, not wasting too much time on drawing.